链表的析构函数方法?

时间:2017-04-10 05:08:08

标签: c++

假设我想为链表功能实现析构函数:

class LinkedList {
        public:
            LinkedList(int value, LinkedList* next);
            ~LinkedList();
            int value();
            LinkedList* next();
        private:
            int value;
            LinkedList* next;
}

我的第一个想法是这样的:

LinkedList::~LinkedList {
    LinkedList* first = this;
    while (first != null) {
        LinkedList* temp = first->next;
        delete first;
        first = temp;
    }
}

这显然不起作用,因为我们有一个delete this调用,它会递归地自我调用。但我不知道如何解决这个问题。我的下一个想法是:

LinkedList::~LinkedList() {
    delete next;
}

但我不确定这实际上是否有效,因为它只是递归调用next的删除方法,直到最终以NULL结束。我将如何为LinkedList的这个实现实现析构函数方法?

1 个答案:

答案 0 :(得分:0)

LinkedList::~LinkedList()
{
    delete next;
}

应该有效。如果您有一个列表:A -> B -> C -> D并删除A(这是您的头),A的析构函数将删除并调用B的析构函数,这将删除并为C调用析构函数,依此类推。 D的析构函数有next = nullptr,因此删除不执行任何操作。

但是,如果你有一个很长的列表并且析构函数不是编译器优化的尾调用,你可能会遇到堆栈溢出。