我试着用自己的方法解决反向链接列表的问题,请发现反向链接列表的问题。

问题描述 投票:0回答:1

嗨,大家能不能告诉我为什么这段代码不能用于逆转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
algorithm data-structures linked-list singly-linked-list doubly-linked-list
1个回答
0
投票

看看这些赋值。

    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 将是那个新的值。

解决办法是执行 temp=temp.next 之前 你改变 next 指针。

    cur=temp
    temp=temp.next
    cur.next=prev
    prev=cur

或者,我觉得更清楚一些,但其实是一样的。

    cur=temp
    temp=cur.next
    cur.next=prev
    prev=cur

在这里,你可以清楚地看到这样的模式: 你在任务右边的东西,在下一个任务中会变成左边的。这清楚地表明,你首先 阅读 变量或属性的当前值,然后是 撰写 赋予它新的价值。

NB: 你永远不会 阅读 nxt所以你不需要这个变量。

一次分配所有的

在Python中,你可以一次进行多次赋值,这样可以节省一个变量(prev)因为 右边的表达式在任何赋值发生之前就被评估。

    temp.next, cur, temp = cur, temp, temp.next

0
投票

试试下面这个。

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
© www.soinside.com 2019 - 2024. All rights reserved.