gpt4 book ai didi

c++ - 删除链表结构的链表

转载 作者:太空宇宙 更新时间:2023-11-04 13:25:46 25 4
gpt4 key购买 nike

我有以下结构需要删除

typedef struct
{
exampleList* pNext; /* pointer to next entry */
exampleList* pSublist1; /* pointer to 'sublist1' list */
exampleList* pSublist2; /* pointer to 'sublist2' list */
exampleList* pSublist3; /* pointer to 'sublist3' list */

//Other data
. . .
} exampleList;

我知道我可以使用递归来做到这一点,如下所示。

void exampleClass::delete(exampleList* sampleList)
{
if (sampleList->pNext) delete(sampleList->pNext);
if (sampleList->pSublist1) delete(sampleList->pSublist1);
if (sampleList->pSublist2) delete(sampleList->pSublist2);
if (sampleList->pSublist3) delete(sampleList->pSublist3);

//cleanup code
. . .
}

这种方法的问题是我在每个列表中都有大量项目,这可能会溢出堆栈。

还忘了提到这些 List 在共享内存中工作,所以如果这个过程出现问题,我想确保我不会失去对链的跟踪。

您知道删除此结构的最简单替代方法吗?

最佳答案

这是一种方法(未测试)。

void free_list (exampleList* root)
{
std::queue<exampleList*> q;
if (root) q.push_back(root);
while (!q.empty())
{
exampleList* node = q.pop_front();
if (node->pNext) q.push_back(node->pNext);
if (node->pSublist1) q.push_back(node->pSublist1);
if (node->pSublist2) q.push_back(node->pSublist2);
if (node->pSublist3) q.push_back(node->pSublist3);
delete node;
}
}

这应该很容易适应使用 unique_ptr 的列表。

旁注:您的结构实际上更像是一棵树而不是列表。

关于c++ - 删除链表结构的链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33426056/

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