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; }
逻辑说明
修复后的逻辑完全符合你的预期:
- 第一次插入20时,头尾指针都指向存储20的节点,链表为
20 -> null - 第二次插入30时,头指针保持不变,把30的节点挂到20的next位置,更新尾指针为30的节点,链表为
20 -> 30 -> null - 调用打印方法时就会输出你预期的
Item 0 :20、Item 1 :30的结果
内容的提问来源于stack exchange,提问作者user15082428
相关产品推荐
相关产品推荐

