【发布时间】:2021-11-15 13:43:55
【问题描述】:
谁能解释为什么这条线head=head.next 的位置必须在curr=head 之后,而不是再往下?最初,我将head=head.next 放在while 循环的最后一行,但只得到最后一个节点。例如。如果输入是[1,2,3],我将使用第二个代码块得到[1],而使用第一个代码块得到[3,2,1]。
正确:
def reverseListIterative(head: ListNode):
prev = None
while head:
curr = head
head = head.next
curr.next = prev
prev = curr
return prev
错误:
def reverseListIterative(head: ListNode):
prev = None
while head:
curr = head
curr.next = prev
prev = curr
head = head.next
return prev
【问题讨论】:
-
分配给
head时,curr和head是相同的。因此赋值curr.next = prev改变了原始head.next,即赋值head = head.next中使用的那个。很明显,在分配给head之前执行该分配会改变它。 -
请注意,此时
curr is head。所以curr上的任何突变(如curr.next = prev)也会影响head,如果你没有先重新分配它。 -
有了这样的东西,它有助于绘制一个图表来显示事物指向的内容。这根本不是语言问题,实际上只是通过仔细分析来推理出某事的练习。
-
@TomKarzes 和 user2390182 谢谢!了解现在发生了什么
标签: python linked-list