链表的析构函数方法

Destructor method for a linked list?

本文关键字:方法 析构函数 链表      更新时间:2023-10-16

假设我想为链表函数实现一个析构函数:

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 的 delete 方法,直到最终以 NULL 结束。我将如何为链接列表的实现实现析构函数方法?

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

应该工作。如果你有一个列表,如:A -> B -> C -> D和删除A(这是你的头(,A的析构函数将删除并调用B的析构函数,这将删除并调用C的析构函数,依此类推。 D的析构函数有next = nullptr,所以删除不做任何事情。

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