删除链接列表的链接列表结构

时间:2015-10-29 22:55:43

标签: c++ linked-list

我有以下需要删除的结构

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正在共享内存中工作,所以如果这个过程发生了什么,我想确保我不会忘记链。

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

1 个答案:

答案 0 :(得分:0)

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

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

的列表

附注:你的结构实际上更像是树而不是列表。