为什么这没有给出输出,内核继续运行,就好像它已经进入了某个循环一样?



学习如何制作链表? 如果可能,请提供更好的解决方案。 新增推送,插入后,打印列表,追加功能。 学习如何制作链表? 如果可能,请提供更好的解决方案。 新增推送,插入后,打印列表,追加功能。

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的下一个调用进入无限循环。

相关内容

最新更新