Input = [1, 2, 3, 4, 5]
def reverseList(self, head):
prev = None
while head:
cur = head
cur.next = prev
head = head.next
prev = cur
return prev
我不明白为什么上面的结果返回
Output = [1]
cur
是临时变量,不受头变量变化的影响(这就是我所认为的)
def reverseList(self, head):
prev = None
while head:
cur = head
head = head.next
cur.next = prev
prev = cur
return prev
返回正确的结果,我不明白为什么。这表明,对head
的更改也会更改cur
变量,尽管它在cur设置为cur = head
后发生了更改
这是您的链接列表示例:
[1]->[2] ->[3] ->[4] ->[5]
最初head
指向[1]
,prev
指向None
。现在让我们逐行执行您的第一个代码。首先将cur
设置为head
(例如,cur
现在指向[1]
),这意味着从现在起head
和cur
都指向[1]
。现在,当您设置cur.next = prev
时,实际上就是在设置[1].next = None
。因此,[1]
和[2]
之间的链接已经断开,此时您松开了链表的所有其他部分(例如[2] -> [3] -> [4] -> [5]
)。现在,当您执行head = head.next
时,这意味着您正在执行[1] = [1].next
,之前您在其中设置了[1].next = None
。在下一次运行中,while loop
将终止,因为磁头变为None
。
我强烈建议你在第二段代码中使用纸笔进行这种类型的模拟,你会理解其中的区别。