c++链表反转 - 指针不前进

标签 c++ linked-list

我知道之前有人问过关于反向链表的问题,但我想尝试用我自己的实现来解决这个问题。

我的代码对我来说很有意义,我觉得它应该可以工作,但是当我运行调试器时,循环无限运行。具体来说,headnext在链表的第一个和第二个节点之间保持交替。 getLink() 方法返回节点的指针(指向列表中的下一个节点)。基于我在 while 循环下的评论的任何输入都会有所帮助。

void revNodes(IntNodePtr& head)
{
    IntNodePtr prev = NULL;
    IntNodePtr next = NULL;
    next = head;
    while (next != NULL)
    {
        prev = head;
        // this should advance the pointer head to the next node in the list because next is the same as head initially
        head = next->getLink();
        // advance the pointer next to node after it
        next = next->getLink();
        // set the pointer in the node that head is pointing to to prev (head before head was advanced)
        head->setLink(prev);
    }
}

最佳答案

您将 next 初始化为 head,然后在循环中将它们设置为都指向相同 节点。

实际上,它们都指向列表头部之后的第一个节点,然后您将该节点上的指针设置为列表头部,行 head->setLink(prev )。因此,在您的下一次循环中,headnext 都指向原来的头节点!

如果你改变:

next = next->getLink();

到:

next = head->getLink();

您将能够在列表中前进,但是然后您将跳转下一个节点,因为您将 head 设置为 next->getLink( )。所以一开始你应该初始化nexthead->getLink(),在里面设置headnext循环,nexthead->getLink(),如上。

因此将其转化为代码:

void revNodes(IntNodePtr& head)
{
    IntNodePtr prev = NULL;
    IntNodePtr next = NULL;
    next = head->getLink();
    while (next != NULL)
    {
        prev = head;
        // this should advance the pointer head to the next node in the list
        head = next;
        // advance the pointer next to node after it
        next = next->getLink();
        // set the pointer in the node that head is pointing to to prev (head before head was advanced)
        head->setLink(prev);
    }
}

关于c++链表反转 - 指针不前进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8530592/

相关文章:

c++ - 在 ARM NEON 中有效地结合面具

c++ - 强制 C++11 lambda 捕获变量

c++ - 此文件需要 C++11 库支持

c - 如何模块化链表?

c++ - 如何从尾部到头部反向 strtok C++ 字符串?

data-structures - 使用数组实现链表 - 优点和缺点

java - 添加大数字值

java - 按名称对已排序的 LinkedList 进行排序

c - 链接列表没有给出所需的输出

c++ - 如何使用不同版本的 mingw 构建的静态库?