这个问题可能是周围最受欢迎的问题之一,在寻找解决方案时,我发现了很多问题,但是下面的代码最适合我。
它实际上所做的是创建另一个列表并遍历旧列表,并将元素始终添加到新列表的开头。
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的下一个指针(因为在此阶段它指向与temp相同的东西),因此您需要首先从其下一个指针更新oldList。