【问题标题】:Circularly Linked Lists C++循环链表 C++
【发布时间】:2011-02-12 21:19:01
【问题描述】:

我有可能在我的循环链接列表中添加一个新元素...当我尝试添加第一个...

if( empty() && pos ==1 )
{

    newnode = new Node(ele);
    newnode->next = newnode;

    last = newnode;
}

.. 我检测到了一个 glibc:双重释放或损坏(fasttop)...你知道为什么吗?

这是因为我必须将 .next 指向他自己,不是吗?我该怎么办,把我的森林指向自己?

【问题讨论】:

  • 双重释放意味着某些东西正在被释放。

标签: c++ linked-list


【解决方案1】:

使用循环链表的主要原因是简化

为此,您应该始终(使用循环列表)使用头节点

对于一个空的循环列表,头节点链接回自身,并且是列表的永久部分,它不携带任何数据——除了在某些情况下,一个标记值。

在标头节点到位后,插入第一个节点与插入第二个或第三个完全相同的代码。

所以,请尝试一下。

干杯,

【讨论】:

    【解决方案2】:

    考虑到它的 empty(),这应该是您的顶级节点,对吧?所以,你应该在这里设置你的 LL 头节点。此外,在您的代码中,您将节点的下一个节点设置为自身。你应该:

    currentNode->Next = new Node();
    lastNode = currentNode;
    

    在设置头节点后执行此操作。

    【讨论】:

    • 就在那之后?节点 * elem; elem newnode = 新节点(ele);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    • 2017-07-29
    • 2019-02-16
    相关资源
    最近更新 更多