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

Java单链表指定位置插入元素代码运行输出大量1错误排查

代码问题分析
  • 新节点赋值逻辑错误:创建SinglyLinkedListNode对象后,立刻执行newNode = temp,直接覆盖了新创建的节点对象,相当于没有生成要插入的新节点,所有对newNode的操作实际都是操作原链表的节点。
  • 头插(pos=0)分支逻辑完全错误:现有代码只是把原head重新赋值给head变量,根本没有完成新节点插入。正确头插逻辑应该是:新节点的next指针指向原head,再把head变量指向新节点。
  • 非头插(pos>0)分支逻辑混乱:
    1. 开头直接执行newNode = temp、head = newNode,直接丢失了原链表的头节点引用
    2. 循环中一直操作head指针而不是移动临时遍历指针,遍历逻辑完全错误,应该先将临时指针移动到pos的前一个节点,再执行插入
    3. 插入逻辑错误,你写的head.next = newNode; newNode = temp既没有把新节点和后续链表接上,还很容易产生链表环,遍历链表时就会无限循环输出重复值,也就是你看到的大量1的原因。
  • 缺少边界校验:没有处理空链表、pos大于等于链表长度的异常场景。
修复后的代码
public static SinglyLinkedListNode insert_at_position(SinglyLinkedListNode head, int val, int pos) {
    // 空链表或者插头部的情况
    if (pos == 0 || head == null) {
        SinglyLinkedListNode newNode = new SinglyLinkedListNode(val);
        newNode.next = head;
        return newNode;
    }
    // 遍历到pos的前一个节点
    SinglyLinkedListNode temp = head;
    for (int i = 0; i < pos - 1; i++) {
        // 已经到链表尾还没到pos,直接返回原头节点
        if (temp.next == null) {
            return head;
        }
        temp = temp.next;
    }
    // 插入新节点
    SinglyLinkedListNode newNode = new SinglyLinkedListNode(val);
    newNode.next = temp.next;
    temp.next = newNode;
    return head;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:18:03