我尝试以自己的方式解决反向链表。请找出反转链表的问题

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