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

Java实现整型链表时insertAt插入末尾覆盖尾节点如何修复

问题原因分析
  • 当插入位置是链表最后一个索引时,此时temp指向原尾节点,temp.nextNode为null,你现有代码的判断if (temp.nextNode != null)为假,因此不会执行newItem.nextNode = temp,导致原尾节点没有被关联到新节点之后,直接丢失。
  • 遍历逻辑冗余混乱:同时维护了ptr、temp、prev三个遍历指针,指针后移逻辑放在了temp.nextNode != null的判断里,导致遍历到尾节点时不会更新索引计数,逻辑极易出错。
  • 缺少边界场景处理:插入位置为0(头节点前插入)时,prev为null,调用prev.nextNode会直接抛出空指针异常。
修复后的insertAt代码
public void insertAt(int index, int item) {
    // 索引合法性校验,可根据需求调整容错逻辑
    if (index < 0) throw new IndexOutOfBoundsException("索引不能为负数");
    // 单独处理头部插入场景
    if (index == 0) {
        head = new Node(item, head);
        return;
    }
    // 找到目标索引的前一个节点
    Node prev = head;
    for (int i = 0; i < index - 1; i++) {
        prev = prev.nextNode;
        if (prev == null) throw new IndexOutOfBoundsException("索引超出链表长度");
    }
    // 新节点next直接关联原index位置的节点,尾节点也不会丢失
    Node newNode = new Node(item, prev.nextNode);
    prev.nextNode = newNode;
}
修复说明
  • 简化遍历逻辑,仅维护一个前驱节点指针,减少冗余变量带来的逻辑错误
  • 新节点创建时直接绑定原index位置的节点,无论原节点是不是尾节点都不会丢失
  • 补充了索引合法性校验和头部插入的特殊处理,覆盖边界场景
  • 修复后插入到任意索引位置,都会将原索引及之后的节点整体后移,符合你的功能预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 22:48:02