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

Java自定义单链表insertAfter函数失效,请求排查修正

问题分析与修复

你的自定义单链表insertAfter函数未正确修改链表节点引用,导致新元素无法插入到链表中,仅size数值错误增加。

错误原因

原insertAfter函数的核心逻辑错误:

insertNode.nextNode = temp;
temp = insertNode;

这段代码只是将新节点的nextNode指向目标节点temp,然后修改了局部变量temp的指向,完全没有修改原链表中目标节点的nextNode引用,因此链表结构没有任何变化。

同时,遍历目标节点的循环未处理temp为null的情况(即找不到指定元素data1时),会直接抛出NullPointerException。

另外,printList函数存在小问题:循环条件temp.nextNode != null会导致最后一个节点的内容无法被打印(比如测试代码中插入的10没有出现在输出里)。

修复后的代码

修正insertAfter函数

public void insertAfter(T data1, T data2) {
    if (isEmpty()) {
        System.out.println("链表为空");
        return;
    }

    Node insertNode = new Node();
    insertNode.data = data2;

    Node temp = headNode;
    // 遍历寻找目标节点,同时处理找不到的情况
    while (temp != null && !temp.data.equals(data1)) {
        temp = temp.nextNode;
    }

    if (temp == null) {
        System.out.println("未找到元素" + data1);
        return;
    }

    // 正确的插入逻辑:新节点指向原目标节点的下一个节点,目标节点指向新节点
    insertNode.nextNode = temp.nextNode;
    temp.nextNode = insertNode;
    size++;
}

修正printList函数

public void printList() {
    if (isEmpty()) {
        System.out.println("链表为空。");
        return;
    }

    Node temp = headNode;
    System.out.println("链表内容: ");
    // 遍历所有节点,包括最后一个
    while (temp != null) {
        System.out.print(temp.data.toString() + "->");
        temp = temp.nextNode;
    }

    System.out.println("null");
}

修复后的运行输出

链表为空。
链表内容: 
0->1->2->3->4->5->6->7->8->9->10->null
链表的大小为: 11
链表内容: 
0->1->2->3->72->4->5->6->7->8->9->10->null
新的链表大小为: 12

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 12:30:48