学习如何制作链表? 如果可能,请提供更好的解决方案。 新增推送,插入后,打印列表,追加功能。 学习如何制作链表? 如果可能,请提供更好的解决方案。 新增推送,插入后,打印列表,追加功能。
class Node:
def __init__(self,data):
self.data = data
self.next = None
class LinkedList:
def __init__(self):
self.head = None
def push(self,new_data):
new_node = Node(new_data)
new_node.next = self.head
self.head = new_node
def insertAfter(self,prev_node,new_data):
if prev_node is None:
print('Enter valid previous node data')
return
new_node = Node(new_data)
new_node.next = prev_node.next
prev_node.next = new_data
def append(self,new_data):
new_node= Node(new_data)
if self.head is None:
self.head = new_node
last = self.head
#while last.next!= None:
#temp = last.next
#last =temp.next
while last.next:
last = last.next
last.next = new_node
def printList(self):
temp = self.head
while temp:
print(temp.data)
temp = temp.next
if __name__ =='__main__':
llist = LinkedList()
llist.append(7)
llist.append(8)
llist.push(5)
llist.insertAfter(Node(5),6)
llist.printList()
修复:
def append(self,new_data):
new_node= Node(new_data)
if self.head is None:
self.head = new_node
return # <- this is the fix
...
如果没有此 return 语句,您将转到这个新添加的节点并将其.next
分配给自身。有了这个循环引用,下一个.append()
进入无限循环
问题出在append
方法上。追加第一个节点时,self.head
为"无",因此执行:
self.head = new_node
但是,您继续尝试查找last
节点,在这种情况下,该节点最终也将self.head
:
last = self.head
#while last.next!= None:
#temp = last.next
#last =temp.next
while last.next:
last = last.next
因此,当您执行此行时:
last.next = new_node
您正在有效地设置new_node.next = new_node
,这会导致对append
的下一个调用进入无限循环。