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

Python读取txt数据存入链表逆序输出及节点增删问题咨询

问题原因

你当前使用的是头插法构建链表:每读取一行文本,就把新生成的节点设为新的头节点,指向之前的旧链表。最先读取的文件第一行会被后续插入的节点不断挤到链表尾部,最后从head开始遍历的时候,自然会从最后插入的文件最后一行开始输出,呈现逆序效果。
这种构建方式本身不会破坏链表的结构逻辑,不会影响后续增删节点操作的正确性,只是链表存储的内容顺序和文件原始顺序相反,如果业务要求存储顺序和文件一致,调整构建逻辑即可。

修正方案

两种常用的链表构建方式适配不同场景,你可以按需选择:

方法1:尾插法(存储顺序和文件原顺序一致,适配当前需求)

尾插法每次把新节点接在当前链表的尾部,额外维护一个尾指针就能避免每次插入都从头遍历找尾,插入效率和头插法一致,都是O(1)时间复杂度,实现代码如下:

# 按照PEP8规范,类名建议使用大驼峰命名
class Node:
    def __init__(self, data='', next=None):
        self.data = data
        self.next = next

head = None
tail = None # 维护尾指针,记录当前链表最后一个节点的位置
with open('All Equipment.txt', 'r', encoding='utf-8') as f:
    for line in f:
        new_node = Node(line.strip())
        if head is None:
            # 空链表场景下,第一个节点同时是头节点和尾节点
            head = new_node
            tail = new_node
        else:
            # 新节点接在尾节点后方,更新尾指针位置
            tail.next = new_node
            tail = new_node

# 遍历验证,输出顺序和文件行顺序完全一致
current = head
while current is not None:
    print(current.data)
    current = current.next

方法2:保留头插法,构建完成后逆序链表(适配栈类业务场景)

如果你后续需要“后进先出”的栈式操作,头插法本身效率极高(插入、删除头部节点都是O(1)时间),不需要修改构建逻辑,只需要在需要正序输出/操作前,把链表做一次逆序即可:

def reverse_linked_list(head):
    prev = None
    current = head
    while current is not None:
        next_node = current.next
        current.next = prev
        prev = current
        current = next_node
    return prev

# 头插法构建完逆序链表后,调用方法得到正序链表
head = reverse_linked_list(head)
拓展知识点
  • 链表操作注意事项:
    • 头节点的增删不需要遍历找前驱节点,直接操作head指针即可,时间复杂度O(1)
    • 中间、尾部节点的增删,必须先定位到目标位置的前驱节点,才能修改next指针完成操作,平均时间复杂度O(n)
    • 写增删逻辑时一定要覆盖边界场景:空链表、仅含单个节点的链表、操作目标是头/尾节点,避免出现断链、空对象引用报错
  • 文件读取建议:打开文件时显式指定encoding参数(比如encoding='utf-8'),避免不同操作系统默认编码不一致导致中文乱码。
  • 工程实践提示:600行这个数据规模下,Python内置的list结构性能远高于手写链表,日常开发如果没有特殊的算法练习需求,直接用列表存储文本行即可,增删改查的接口更简单,性能也更好。手写链表更适合作为数据结构入门的练习场景。
  • 头插法的典型适用场景是实现栈结构,栈顶对应链表头,入栈、出栈操作都只需要修改头指针,效率极高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 00:54:26