c++ - 在链表中,析构函数以什么顺序删除节点?

标签 c++ linked-list destructor

<分区>

在链表中,析构函数删除节点的顺序是什么?

它是先到后还是后到先?

最佳答案

任何一种顺序都是可能的——唯一可以确定的方法是检查您正在使用的具体实现。

一般来说,对于单向链表,我希望从头到尾排序,因为它更容易实现并且效率更高:

LinkedList::~LinkedList()
{
    Node *node = mHead;
    while (node) {
        Node *next = node->mNext;
        delete node;
        node = next;
    }
}

相对于从后到先的顺序,单向链表通常需要某种递归:

void deleteList(Node *node)
{
    if (node == 0) {
       return;
    }
    deleteList(node->mNext);
    delete node;
    return;
}
LinkedList::~LinkedList()
{
   deleteList(mHead);
}

再说一遍——唯一可以确定的方法是查看您的链表实现。

关于c++ - 在链表中,析构函数以什么顺序删除节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40442399/

相关文章:

C++ 未声明的标识符 vector

java - 使用 LinkedList 而不是 Vector 来定制递归 zip 文件比较工具

Java如何返回扩展接口(interface)的泛型类型

c++ - 从模板参数中获取字段值而不是直接访问以允许相同信息使用不同名称的函数

c++ - qDebug() 在 Windows 上不支持 unicode 字符串

c - 将字符串插入链表不起作用

c++ - 为什么销毁顺序与构造顺序相同,静态对象(C++)?

c++ - C++中构造函数和析构函数的执行顺序

c++ - 为什么在Friend函数中调用析构函数

c++ - C++ 中的 ASCII 艺术