反转链表后打印ListNode的val值时出现NullPointerException错误
NullPointerException问题根因
- 该错误触发的核心原因是你访问
.val属性的palindrome变量本身为null,Java中不允许访问null对象的成员属性和方法,和打印语句本身逻辑无关。 - 链表反转场景下导致该变量为null的常见原因:
- 反转方法边界处理错误:如果输入的原链表为空、或者仅含1个节点时,你的反转逻辑错误返回了null值
- 反转逻辑终止条件错误:反转循环结束时错误返回了已经移动到null位置的游标指针,而非反转后的新头节点
- 遍历逻辑越界:你在遍历反转后的链表时,游标走到了链表尾部的next位置(该位置本身为null),赋值给
palindrome后再访问属性触发报错
修复方案
- 先增加空校验再访问节点属性,可先将打印逻辑替换为如下代码定位问题:
if (palindrome != null) { System.out.println(palindrome.val); } else { System.out.println("palindrome节点为空,请排查上游赋值逻辑"); }
- 核对你的链表反转逻辑是否符合标准实现,重点检查返回值是否正确:
标准单链表反转参考实现如下:
public ListNode reverseList(ListNode head) { ListNode prev = null; ListNode curr = head; while (curr != null) { ListNode nextTemp = curr.next; curr.next = prev; prev = curr; curr = nextTemp; } // 循环终止时curr为null,prev才是反转后的新头节点,不要错误返回curr return prev; }
- 检查反转方法调用后的赋值逻辑,确认是否将反转方法的返回值正确赋值给了
palindrome变量。
内容的提问来源于stack exchange,提问作者Syed Ali Reza Hussain
相关产品推荐
相关产品推荐

