Python单链表display方法无法展示全部节点元素该如何修复?
单链表问题修复方案
问题原因
你的代码存在两处逻辑错误,共同导致了当前问题:
create_list方法仅读取了用户输入的节点值,没有调用插入方法将节点加入链表,所有输入的初始节点全部丢失,执行完create_list后链表始终为空insert_at_end方法的遍历终止条件错误:当前while p is not None的判断会让p遍历到None才停止,此时尝试给p.link赋值会直接抛出属性错误;只有当链表为空时,才会走空链表插入分支正常插入,这也是你只能看到最后插入的70的原因
修复方法
- 完善
create_list方法,每次读取节点值后调用insert_at_end执行插入 - 修改
insert_at_end的遍历条件,遍历到最后一个节点(即p.link is None)时停止
class Node: def __init__(self, value): self.info = value self.link = None class SingleLinkedList: def __init__(self): self.start = None def create_list(self): n = int(input('enter number of nodes ')) if n == 0: return for i in range(n): b = int(input('enter the element to be inserted ')) # 新增插入逻辑 self.insert_at_end(b) def insert_at_end(self, data): temp = Node(data) #insertion in the empty linked list if self.start is None: self.start = temp return p = self.start # 修改遍历终止条件 while p.link is not None: p = p.link p.link = temp def display_list(self): if self.start is None: print('linked list is empty') else: print('list is: ') p = self.start while p is not None: print(p.info, "", end='') p = p.link print() test = SingleLinkedList() test.create_list() data = 70 test.insert_at_end(data) test.display_list()
效果验证
如果你在create_list阶段输入节点数为2,依次输入10、20,程序最终输出为:
list is: 10 20 70
内容的提问来源于stack exchange,提问作者Mahzad
相关产品推荐
相关产品推荐

