gpt4 book ai didi

c++ - 如何在不递归的情况下删除链表?

转载 作者:太空狗 更新时间:2023-10-29 23:51:23 27 4
gpt4 key购买 nike

我正在尝试找到一种无需递归即可删除链表的方法,因为堆栈溢出并不是什么好事。

我有一个结构如下:

typedef struct _my_Item
{
_my_Item(const std::string& name)
{
m_name = name;
}
~my_Item()
{
delete next; // this recursively deletes the "tail" of the list
next = NULL;
}
struct _my_Item *next;
std::string m_name;
// ... More members here...
}

在一些代码(此处不相关)中,我使用上述结构从数据文件构建列表。我将指向列表头部的指针保存在一个变量中并可以使用它。一切都很好。当我最终调用列表头部的析构函数时,析构函数被调用并且 delete next; 导致递归删除列表的“尾部”(这是没有第一个的整个列表元素)。现在由于列表很长,我有时会看到堆栈溢出。

有什么好的方法可以解决这个问题吗?

最佳答案

~my_Item()
{
while (next)
{
_my_Item* item = next;
next = item->next;
item->next = NULL; // this prevents the recursion
delete item;
}
}

关于c++ - 如何在不递归的情况下删除链表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21571395/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com