Python循环链表尾节点删除代码调试:加入while循环后运行异常
循环链表尾节点删除代码问题排查与修复
问题分析
你的代码存在三个核心问题,导致程序无法正常运行:
- 缩进错误:
Node和cll类中的方法未正确缩进,Python作为缩进敏感语言,会将这些方法识别为全局函数而非类成员,直接引发语法错误。 - 单节点删除状态不一致:当链表仅含一个节点时,删除操作仅将
self.head设为None,但self.tail仍指向原节点,导致链表状态异常。 - 冗余代码:
del_end函数中self.tail = None后立即赋值self.tail = a,属于无效操作,无实际意义。
修复后的完整代码
class Node: def __init__(self, data): self.data = data self.next = None class cll: def __init__(self): self.head = None self.tail = None def display(self): if self.head is None: print("Circular Linked List is empty") else: a = self.head print(a.data, end=" ") while a.next != self.head: a = a.next print(a.data, end=" ") print() # 移除原重复打印head的逻辑,避免输出冗余 def del_end(self): if not self.head: print("Circular Linked List is empty") else: if self.head == self.tail: # 单节点删除时同时清空head和tail,保证状态一致 self.head = None self.tail = None else: a = self.head # 遍历找到倒数第二个节点 while a.next != self.tail: a = a.next # 更新tail为倒数第二个节点,并维持循环链表结构 self.tail = a a.next = self.head
驱动代码运行结果
使用你提供的驱动代码运行后:
- 第一次
display输出:10 2 33 - 调用
del_end后,第二次display输出:10 2
内容的提问来源于stack exchange,提问作者the la
相关产品推荐
相关产品推荐

