2

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

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

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声明之后立即完成?

4

1 回答 1

2

做完之后

Node *temp = oldList;

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

temp->next = newList;

将覆盖 oldList 的 next 指针(因为它在这个阶段指向与 temp 相同的东西),您需要先从它的 next 指针更新 oldList。

于 2012-04-25T12:58:16.013 回答