链接列表析构函数不起作用

时间:2014-11-22 12:03:52

标签: c++ linked-list destructor

我为双向链表编写了一个析构函数,但该代码无法正常工作。有一个循环删除值。控制线来自该循环,但程序没有完成。我的意思是,主要没有结束。

没关系,我明白了。

2 个答案:

答案 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;
}