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



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

它实际上所做的是创建另一个列表并遍历旧列表,并将元素始终添加到新列表的头部

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.之后

我的问题是它真的有区别吗?我无法理解原因,因为毕竟您正在迭代旧列表。为什么需要在 *temp 声明后立即完成?

Node *temp = oldList;

两个指针指向同一位置。因为

temp->next = newList;

将覆盖 oldList 的下一个指针(因为它在此阶段指向与 temp 相同的内容),您需要先从其下一个指针更新 oldList。

相关内容

  • 没有找到相关文章

最新更新