实现Java链表尾部插入节点方法时触发空指针异常,该如何解决?
异常成因
- 抛出
NullPointerException的核心原因是代码未覆盖空链表的边界场景:当传入的head参数本身为null(即待插入的原链表为空)时,代码会直接执行while(head.next != null)逻辑,对null对象访问next属性,直接触发空指针异常。 - 原实现默认传入的链表必然存在至少一个头节点,完全遗漏了空链表的插入分支逻辑。
- 对比
insertAtBeginning方法运行正常的原因:该方法从未对入参head的属性进行直接访问,仅将head的引用值赋值给新节点的next属性,即使head为null也不会触发空指针操作。
修复方案
在进入尾节点遍历逻辑前,增加空链表的前置判断:
- 如果
head为null,直接将新创建的节点作为新的链表头节点返回 - 如果
head不为null,保留原有遍历到链表尾部、拼接新节点的逻辑即可
修复后的insertAtEnd实现:
Node insertAtEnd(Node head, int x) { // 处理空链表场景 if (head == null) { Node inserting = new Node(x); return inserting; } Node first = head; while(head.next != null){ head = head.next; } Node inserting = new Node(x); head.next = inserting; return first; }
内容的提问来源于stack exchange,提问作者SUPER ADI
相关产品推荐
相关产品推荐

