在python中反转LinkedList
这就是我用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_
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节点
[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