如何在链表末尾添加元素?addAtLast方法未返回更新链表问题
搞定链表末尾添加元素的问题
嘿,我来帮你排查这个问题!你的addAtLast()方法有两个关键bug,导致新节点(比如50)没被正确添加到链表末尾:
- 循环结束后temp是null,赋值新节点不会修改原链表:你写的
while (null != temp)会一直把temp往后移,直到temp变成null(最后一个节点的next就是null)。这时候你给temp = newNode只是给局部变量temp赋值,完全没把新节点链接到原链表的最后一个节点上,相当于做了无用功。 - 没处理空链表的情况:如果一开始链表是空的(head为null),你的代码直接返回原来的head,新节点根本没被用上。
修复后的完整代码
public Node addAtLast(Node head, int data) { Node newNode = new Node(data); // 空链表直接返回新节点作为head if (head == null) { return newNode; } Node temp = head; // 循环走到最后一个节点(而不是null) while (temp.next != null) { temp = temp.next; } // 把新节点挂到最后一个节点的next上 temp.next = newNode; System.out.println(newNode); // 这里打印新节点更直观 return head; }
为什么这样改就对了?
- 先处理空链表:如果原链表是空的,直接把新节点作为新的head返回,这是必须的边界情况。
- 调整循环条件:
while (temp.next != null)会让temp停在链表的最后一个节点(因为最后一个节点的next是null,循环就停止了),而不是跑到null去。 - 真正链接新节点:通过
temp.next = newNode,把新节点实实在在挂载到原链表的末尾,这才是修改链表的正确方式。 - 返回正确的head:非空链表返回原来的head就行(因为我们只是在末尾加节点,head没变);空链表返回新节点作为新head。
这样修改后,再调用addAtLast(),新元素就会被正确添加到链表末尾,方法返回的也是更新后的链表啦!
内容的提问来源于stack exchange,提问作者Mithun kumar soni
相关产品推荐
相关产品推荐

