You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python循环链表尾节点删除代码调试:加入while循环后运行异常

循环链表尾节点删除代码问题排查与修复

问题分析

你的代码存在三个核心问题,导致程序无法正常运行:

  1. 缩进错误:Node和cll类中的方法未正确缩进,Python作为缩进敏感语言,会将这些方法识别为全局函数而非类成员,直接引发语法错误。
  2. 单节点删除状态不一致:当链表仅含一个节点时,删除操作仅将self.head设为None,但self.tail仍指向原节点,导致链表状态异常。
  3. 冗余代码: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 13:17:32