我正在编写反转链表的代码。这是代码
Node* reverseLinkedList(Node *head)
{
Node* temp = head;
Node* prev = NULL;
while(temp != nullptr) {
Node* next = temp->next;
temp->next = prev;
prev = temp;
temp = next;
}
return prev;
// Write your code here
}
而且效果非常好。但是,由于下一个节点只是 temp->next,为什么我不能使用
Node* reverseLinkedList(Node *head)
{
Node* temp = head;
Node* prev = NULL;
while(temp != nullptr) {
Node* next = temp->next;
temp->next = prev;
prev = temp;
temp = temp->next;
}
return prev;
// Write your code here
}
以上现在不起作用。我希望能清楚地了解节点在这里如何工作。谢谢!
这两个代码示例并不等效。
在第一个中,您将 temp->next
的
current值存储在变量
next
中。这样做的原因是您将在下一行用 temp->next = prev;
覆盖该值。如果您没有在某个地方复制它,那么它就会丢失。
在第二个示例中,您可以清楚地看到如果您忘记修改了该值会发生什么情况。它被
prev
覆盖,然后当您前进到“下一个”节点时,您实际上前进到 prev
,它始终是 NULL
并且循环终止。