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

Java链表insert方法新增节点时覆盖头节点丢失旧节点如何解决

问题原因

你的insert方法存在两处核心逻辑错误,直接导致了节点丢失和输出异常:

  • 每次调用insert时都会直接创建新节点覆盖全局头指针startOfNode,之前存储的链表节点没有任何引用保留,自然全部丢失
  • 每次插入操作都会重复创建2个存储相同data的节点,所以插入30时会输出两个30,和你预期的「每次调用插入1个节点到链表尾部」的逻辑完全不符

修复后的代码

修改后的insert方法实现标准尾部追加逻辑如下:

public void insert(D data) throws ListOverflowException {
    // 先创建要插入的新节点
    Node<D> newNode = new Node<>(data);
    // 头指针为空说明是第一次插入,直接初始化头尾指针
    if (startOfNode == null) {
        startOfNode = newNode;
        endOfNode = newNode;
        return;
    }
    // 非首次插入,把新节点挂到当前尾节点的next位置
    endOfNode.setNext(newNode);
    // 更新尾指针为新插入的节点
    endOfNode = newNode;
}

逻辑说明

修复后的逻辑完全符合你的预期:

  1. 第一次插入20时,头尾指针都指向存储20的节点,链表为20 -> null
  2. 第二次插入30时,头指针保持不变,把30的节点挂到20的next位置,更新尾指针为30的节点,链表为20 -> 30 -> null
  3. 调用打印方法时就会输出你预期的Item 0 :20、Item 1 :30的结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:48:03