无法弄清楚如何在c ++中清除链表?

时间:2013-10-26 19:36:54

标签: c++ list linked-list stack

我正在试图找出如何清除堆栈(以链表的形式)。链接列表不是我的强项;我根本不懂。这是我的代码,任何人都可以解释为什么它不起作用?当我尝试通过main中的开关调用该方法时,它似乎陷入无限循环。

void stack :: clearStack()
{
if (isEmpty()== true)
{
    cout << "\nThere are no elements in the stack. \n";
}

else 
{
    node *current = top;
    node *temp;
    while(current != NULL);
    {
        current = temp -> next;
        delete current;
        current = temp;
    }
}

}

4 个答案:

答案 0 :(得分:2)

该代码存在一些问题。第一个是在你循环之前取消引用一个未初始化的指针(temp)另一个delete next指针(从而在你自己的脚下拉出地毯,所以说)。

就像

一样简单
node* next;
for (node* current = top; current != nullptr; current = next)
{
    next = current->next;
    delete current;
}

哦,当你完成时不要忘记清除top

答案 1 :(得分:0)

您尚未初始化temp。您需要将temp设置为列表的第一个节点。在循环内部,循环遍历节点并继续删除它们。

node *current = top;
node *temp = top; //    initialize temp to top
while(current != NULL);
{
    temp = temp -> next; // increase temp
    delete current;
    current = temp;
}

答案 2 :(得分:0)

认为这就是你想要做的事情:

node *current = top;
while(current != NULL);
{
    node *temp = current->next;
    delete current;
    current = temp;
}
top = null;

答案 3 :(得分:0)

if (isEmpty()== true)
{
    cout << "\nThere are no elements in the stack. \n";
}
else 
{
    node *current = top;
    node *temp;
    while(current != NULL);
    {
        current = temp -> next;
        delete current;
        current = temp;
    }
}

整个区块可以替换为:

while (top != nullptr)
{
    unique_ptr<node> p(top);
    top = top->next;
}

如果列表已经为空,则不执行任何操作。如果它是非空的,unique_ptr将控制当前top的内存管理(将在循环迭代之间删除它),将top移动到next 。当topNULL时,所有内容都会被清除,top设置为NULL