我为双向链表编写了一个析构函数,但该代码无法正常工作。有一个循环删除值。控制线来自该循环,但程序没有完成。我的意思是,主要没有结束。
没关系,我明白了。
答案 0 :(得分:0)
首先:移动delete node;
行。
如果只存在头部则会产生错误。
LinkedList::~LinkedList() {
ListItem* node = head;
ListItem* temp = NULL;
if (head != NULL && head->next == NULL) {
delete head;
} else {
while (node->next) {
temp = node;
node = node->next;
delete temp;
}
delete node;
}
}
或删除if statment。
LinkedList::~LinkedList() {
ListItem* node = head;
ListItem* temp = NULL;
while (node->next) {
temp = node;
node = node->next;
delete temp;
}
delete node;
}
答案 1 :(得分:0)
您可以编写析构函数cimpler。例如
LinkedList::~LinkedList()
{
for ( ListItem *node = head; node; )
{
ListItem *temp = node;
node = node->next;
delete temp;
}
head = nullptr;
}
或者
LinkedList::~LinkedList()
{
while ( head )
{
ListItem *temp = head;
head = head->next;
delete temp;
}
head = nullptr;
}