如何在全局函数中访问链表的头尾?

时间:2017-06-14 09:21:14

标签: c++ singly-linked-list

在我的考试中,我有一个问题,我必须在我的课外实现一个全局函数来反转作为参数传入的列表的内容。我不知道该怎么做。 如果我必须实现一个属于IntList类的反向函数,我知道如何做到这一点:

const int IntList::front() const
{
    return head->data;
}

int IntList::count() const
{
    int count = 0;
    for (IntNode *i = head; i != 0; i = i->next)
    {
        ++count;
    }

    return count;
}

void IntList::reverse(IntList &list)
{
    int counter = count();

    while (counter != 0)
    {
        list.push_front(front());
        pop_front();
        --counter;
    }
}

然而,在测试中,我没有访问count()函数来计算我需要在列表上调用push_front()和pop_front()的次数。我想知道是否有一种方法可以访问私有数据成员循环列表?或者我是否以完全错误的方式思考这个问题?

我得到了什么:

struct IntNode 
{
    int data;
    IntNode *next;
    IntNode(int data) : data(data), next(0) {}
};

class IntList
{
    private:
        IntNode *head;
        IntNode *tail;
    public:
        IntList();
        IntList(const IntList &cpy);
        IntList & operator=(const IntList &rhs);
        ~IntList();
        bool empty() const;
        int front() const; //implement
        void push_front(int value); //implement
        void pop_front(); //implement
        void push_back(int value); //implement
        void pop_back(); //implement
};

void reverse(IntList &list); //implement as global function

1 个答案:

答案 0 :(得分:0)

以下实施解决了您的问题

void reverse(IntList &list)
{
    IntList previousList = list;   //Store the previous list.
    list = IntList();              //Initialise a new List.
    while(!previousList.empty())
    {
        int frontValue = previousList.front();
        list.push_front(frontValue);
        previousList.pop_front();
    }
}

你无需知道清单要反转多长时间。