自定义LinkedList构造器:ArrayList转链表出现数据错误,求排查
问题排查与修复
你的代码问题出在循环的起始索引和执行次数上:
问题分析
你已经手动创建了head节点,对应ArrayList的第一个元素(list.get(0)),但后续循环又从i=0开始,导致第一个元素被重复添加;同时循环执行了list.size()次,最终生成的节点数量会比原列表多1个,这就是测试时得到[1, 1, 2]而不是[1, 2, 3]的原因。
修复后的代码
public LinkedList(ArrayList<E> list) { head = null; size = 0; if (list != null && !list.isEmpty()) { // 初始化头节点为第一个元素 head = new Node<E>(list.get(0)); Node<E> current = head; // 从第二个元素开始遍历(i=1),直到列表末尾 for (int i = 1; i < list.size(); i++) { current.next = new Node<E>(list.get(i)); current = current.next; } size = list.size(); } }
关键修改点
- 循环起始索引从
i=0改为i=1:跳过已经作为头节点的第一个元素,避免重复 - 循环次数自动变为
list.size()-1次:保证最终节点数量和原ArrayList的元素数量一致
测试时,传入[1,2,3]会生成正确的链表1->2->3。
内容的提问来源于stack exchange,提问作者Samuel Jackson
相关产品推荐
相关产品推荐

