大家好,你能告诉我为什么这段代码不适用于逆转链表我尝试了自己的方法来解决,但不明白我做错了什么
def reverselist(self):
temp=self.start
cur=None
prev=None
nxt=None
while(temp!=None):
nxt=temp.next
cur=temp
cur.next=prev
prev=cur
temp=temp.next
看看这些作业:
cur=temp
cur.next=prev
prev=cur
temp=temp.next
真正改变列表的是cur.next=prev
.在那里,您将next
指针指向后。但是在那次更改之后,您确实temp=temp.next
.因此,您在此处获取修改后的.next
值。
如果这不能澄清它,那么意识到temp == cur
(第一个任务(,所以cur.next == temp.next
.如果将新值分配给cur.next
,则temp.next
将是该新值。
解决方案是在更改next
指针之前执行temp=temp.next
:
cur=temp
temp=temp.next
cur.next=prev
prev=cur
或者,我觉得更清楚一点,但实际上是一回事:
cur=temp
temp=cur.next
cur.next=prev
prev=cur
在这里,您可以清楚地看到模式:您在作业右侧的内容在下一个作业中变为左侧。这清楚地表明您首先读取变量或属性的当前值,然后向其写入新值。
注意:你从不读nxt
,所以你不需要那个变量。
一次分配所有内容
在 Python 中,你可以一次进行多个赋值,这会为你节省一个变量 (prev
(,因为右侧的所有表达式都会在任何赋值发生之前被计算:
temp.next, cur, temp = cur, temp, temp.next
试试下面:
def reverselist(self):
temp=self.start
cur=None
prev=None
nxt=None
while(temp!=None):
nxt=temp.next
temp.next = prev
prev = temp
temp = nxt
self.start = prev