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
相关产品推荐
相关产品推荐

