Java自定义链表addFirst()方法添加多元素后size仅返回1问题求助
问题原因
你自定义的addFirst()方法头插逻辑完全错误,这是导致插入多元素后仅保留最后一个元素、size()返回1的核心原因。
原方法错误点拆解
走读三次插入流程你就能清晰看到问题:
- 第一次插入
s2:此时head为null,直接将head指向s2节点,逻辑暂时正常 - 第二次插入
s3:进入else分支- 新创建的
s3节点next默认是null,执行newFirst = newFirst.getNext()后newFirst被赋值为null - 紧接着执行
newFirst = head,newFirst又被覆盖为指向s2节点的引用 - 最后执行
head = newFirst.getNext(),s2节点的next是null,直接把head设为null,之前插入的s2节点彻底失联
- 新创建的
- 第三次插入
s1:此时head为null,直接将head指向s1节点,最终链表仅有s1一个节点,所以size()返回1
修复方案
头插法的核心逻辑只有两步:
- 新节点的
next指针指向当前链表的头节点 - 将链表头节点更新为新节点
该逻辑兼容链表为空的场景,不需要额外做null判断,修复后的代码如下:
public void addFirst(Type data) { Node<Type> newFirst = new Node<Type>(data); newFirst.setNext(head); head = newFirst; }
修复后执行三次插入操作,链表结构会变成Summer → Winter → Spring,size()返回3符合预期。
内容的提问来源于stack exchange,提问作者Silvermyst
相关产品推荐
相关产品推荐

