在链表中,析构函数以什么顺序删除节点?
In a linked list, in what order are nodes removed by the 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);
}
再说一遍——唯一可以确定的方法是查看您的链表实现。
我想那是因为编译器读取代码。从上到下,析构函数从头到尾删除。你甚至可以使用 { }|确保在通常发生之前重新分配内存。
在链表中,析构函数删除节点的顺序是什么?
它是先到后还是后到先?
任何一种顺序都是可能的 - 唯一可以确定的方法是检查您正在使用的具体实现。
一般来说,对于单向链表,我希望从头到尾排序,因为它更容易实现并且效率更高:
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);
}
再说一遍——唯一可以确定的方法是查看您的链表实现。
我想那是因为编译器读取代码。从上到下,析构函数从头到尾删除。你甚至可以使用 { }|确保在通常发生之前重新分配内存。