在python中反转LinkedList

在python中反转LinkedList,python,linked-list,Python,Linked List,这就是我用python初始化LinkedList数据结构的方法 在我附加一些节点之后,通过 class node: def __init__(self, data = None): self.data = data self.next = None class linked_list: def __init__(self): self.head = node() 然后用我写的函数来显示 my_list.append(1) my_

这就是我用python初始化LinkedList数据结构的方法

在我附加一些节点之后,通过

class node:
    def __init__(self, data = None):
        self.data = data
        self.next = None

class linked_list:
    def __init__(self):
        self.head = node()
然后用我写的函数来显示

my_list.append(1)
my_list.append(2)
my_list.append(3)
my_list.append(4)
它会打印出看起来不错的
[1,2,3,4]

但是,当我尝试使用下面的函数来反转它时

def display(self):

    elems = []
    curr = self.head

    while curr.next != None:
        curr = curr.next
        elems.append(curr.data)

    print(elems)
它给我一个空的linkedList
[]
。如果我在纸上画LinkedList,它看起来很好,我看不出我做错了什么。

相反 查看您的操作顺序:

def reverseList(self):

    curr = self.head
    prev = None


    while curr != None:

        curr.next = prev
        prev = curr
        curr = curr.next

    self.head = prev
在执行
curr=curr.next
之前,
curr.next
等于
prev
,这等于无(在第一次和最后一次迭代期间)

更改前,需要将
curr.next
的值存储在中间变量中

或者,您可以使用Python的multiple assignment()在计算所有变量的值后立即分配它们:

curr.next = prev
prev = curr
curr = curr.next
展示 在显示功能中也有同样的问题

curr.next, prev, curr = prev, curr, curr.next

您不附加第一个
curr.data
,而是直接将
curr
更改为
curr.next

正如@bazzells所述,您需要第三个变量来跟踪下一个节点,然后再丢弃它:

while curr.next != None:
    curr = curr.next
    elems.append(curr.data)
关于代码样式的说明:

  • 使用
    is None
    is not None
    将实例与
    Nome
    进行比较,因为您只需要比较标识(内存地址)
  • 类名应为CAMELLE
  • 变量名和函数名应为snake_大小写
  • 避免在代码中使用
    next
    ,因为它是一个内置函数,也可能会造成混淆(例如,替换为
    next\u节点

您需要第三个变量来跟踪“下一个”节点。curr.next不是对该节点的充分引用,因为您正在while循环的第一行重新定义该节点的下一个指针。在我进行更改后,我得到的是
[3,2,1,None]
而不是
[4,3,2,1]
,我不确定为什么4消失了。有什么想法吗?在我做了一个改变之后,我得到的是[3,2,1,None],而不是[4,3,2,1],我不知道为什么4不见了。有什么想法吗?
def reverse(self):
    curr = self.head
    prev = None
    while curr is not None:
        next_ = curr.next
        curr.next = prev
        prev = curr
        curr = next_
    self.head = prev