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

How can I access head and tail of a linked list in a global function?

在我的考试中我有一个问题,我必须在 class 之外实现一个全局函数来反转作为参数传入的列表的内容。我不知道该怎么办。 如果我必须实现作为 IntList class:

一部分的反向函数,我知道该怎么做
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

以下实现解决了您的问题

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();
    }
}

你不需要知道列表有多长来反转它。