我尝试以自己的方式解决反向链表。请找出反转链表的问题
I tried solving reverse linkedlist on my own way. please spot the problem reversing the linkedlist
大家好你能告诉我为什么这段代码不能用于反转链表吗我尝试了自己的方法来解决但不明白我做错了什么
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
试试下面这个:
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
看看这些作业:
cur=temp
cur.next=prev
prev=cur
temp=temp.next
真正改变列表的是cur.next=prev
。在那里你让 next
指针向后指向。但是 在 改变之后,你会 temp=temp.next
。因此,您在此处采用 modified .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
cur=temp
cur.next=prev
prev=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
看看这些作业:
cur=temp
cur.next=prev
prev=cur
temp=temp.next
真正改变列表的是cur.next=prev
。在那里你让 next
指针向后指向。但是 在 改变之后,你会 temp=temp.next
。因此,您在此处采用 modified .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