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

Python读取txt创建链表后如何正确实现头部插入新节点

故障原因

代码无法实现头部插入和txt导入逻辑无关,是三个写法错误导致的:

  • 类属性命名前后不统一:append方法操作的头节点属性是self.head,但addFirst里操作的是self.__head。Python中双下划线开头的属性会触发名称修饰机制,self.__head和之前存储txt导入数据的self.head是完全独立的两个变量,根本修改不到实际的链表头。
  • 新节点初始化传参错误:创建新节点时写死了Node(data=''),调用方法时传入的用户输入没有传给节点构造函数,就算插入位置正确,节点存储的也是空字符串。
  • 长度统计逻辑缺失:原有append方法没有同步更新链表长度计数,如果要维护长度属性,追加节点时也要同步累加长度,否则长度统计值会不准。
修正方案

统一类内所有属性的命名规则,修正节点传参逻辑即可,以下是可直接运行的修正代码:

class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

class LinkedList:
    def __init__(self):
        self.head = None
        self.size = 0

    def append(self, data=''):  
        new_node = Node(data)
        if self.head is None:
            self.head = new_node
            self.size += 1
            return
        last = self.head
        while last.next:    
            last = last.next
        last.next = new_node
        self.size += 1

    def addFirst(self, data=''):
        newNode = Node(data)
        newNode.next = self.head
        self.head = newNode
        self.size += 1


# 原有txt导入逻辑无需修改
linked_list = LinkedList()
with open('All Equipment.txt', 'r') as f:
    for line in f:
        linked_list.append(line.strip())

# 调用头部插入
Info = input('Enter your data: ')
linked_list.addFirst(Info)

如果你偏好使用双下划线开头的私有属性,只需要把类初始化、append方法里所有的self.head、self.size全部替换为self.__head、self.__size即可,核心要求是类内部所有操作引用的属性名必须完全一致,不能混用公有、私有命名。

内容的提问来源于stack exchange,提问作者Samir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 03:27:33