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



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

是第一个到最后一个还是最后一个到第一个?

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

一般来说,对于单链表,我希望采用先到后的排序,因为这样更容易实现,而且效率更高:

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

所以——唯一确定的方法是看你的链表实现

我想这是因为编译器读取代码。析构函数从上到下依次删除。你甚至可以使用{}|来确保内存的重新分配在它通常发生之前。

最新更新