You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在链表末尾添加元素?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;
}

为什么这样改就对了?

  1. 先处理空链表:如果原链表是空的,直接把新节点作为新的head返回,这是必须的边界情况。
  2. 调整循环条件:while (temp.next != null)会让temp停在链表的最后一个节点(因为最后一个节点的next是null,循环就停止了),而不是跑到null去。
  3. 真正链接新节点:通过temp.next = newNode,把新节点实实在在挂载到原链表的末尾,这才是修改链表的正确方式。
  4. 返回正确的head:非空链表返回原来的head就行(因为我们只是在末尾加节点,head没变);空链表返回新节点作为新head。

这样修改后,再调用addAtLast(),新元素就会被正确添加到链表末尾,方法返回的也是更新后的链表啦!

内容的提问来源于stack exchange,提问作者Mithun kumar soni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:51:17