c++ - 更改链表反转中的行会导致错误

标签 c++ algorithm data-structures linked-list

这个问题可能是最常见的问题之一,在寻找解决方案时,我发现了很多问题,但下面的代码最适合我。

它实际上做的是创建另一个列表并迭代旧列表并将元素始终添加到新列表的head

Node *reverseList(Node *oldList)
{
    Node* newList=NULL;

    while(oldList!=NULL)
    {
        Node *temp=oldList;
        oldList=oldList->next;

        temp->next=newList;
        newList=temp;  
    }
    return newList;
}

但是,当我决定在不查看此代码的情况下重新实现这个想法时,我更改了 oldList=oldList->next; 的位置,并将其放在 newList=temp 之后.

我的问题是它真的有影响吗?我无法理解原因,因为毕竟你正在遍历 oldList。为什么需要在 *temp 声明之后立即完成?

最佳答案

做完之后

Node *temp = oldList;

两个指针都指向同一个地方。自从

temp->next = newList;

会覆盖oldList的next指针(因为现阶段它指向与temp相同的东西),需要先从其next指针更新oldList。

关于c++ - 更改链表反转中的行会导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10316107/

相关文章:

algorithm - 以两个值作为键的哈希表

c++ - 递归函数错误Dev-C++

algorithm - 堆与二叉搜索树(什么时候比另一个更好?)

c++ - 如何将此代码从 Dijkstra 转换为 Astar?

c++ - 有没有一些方法可以更改 Qt Creator 语法突出显示的设置?

algorithm - 如何计算列表中的唯一项?

algorithm - 分母为导数的 Durand-Kerner

algorithm - 使用二分搜索和 Trie 的复杂性

c++ - QWebView设置边框可见

c++ - 尝试以 child 方式乘法