为什么此代码不返回反向链表


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]),这意味着从现在起headcur都指向[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

我强烈建议你在第二段代码中使用纸笔进行这种类型的模拟,你会理解其中的区别。

相关内容

  • 没有找到相关文章

最新更新