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

Java链表反转迭代中打印变量值及解决空指针异常方法

解决链表反转中的空指针异常并实现变量打印

我来帮你分析问题根源,然后给出修复后的代码方案~

为什么会出现空指针异常?

你的代码里有两个明显触发NPE的点:

  1. 循环末尾访问current.data:循环最后执行current = next,当处理到链表最后一个节点时,next是null,赋值给current后它就变成了null,此时再调用current.data自然会抛出空指针异常。
  2. 访问current.next.data:当current是链表的最后一个节点时,current.next本身就是null,直接访问null.data也会触发NPE。

修复方案与优化后的代码

我们需要调整打印时机,同时对可能为null的变量做判空处理,确保打印时不会访问空对象的属性。下面是满足你需求的代码:

Node reverse(Node node) { 
    Node prev = null; 
    Node current = node; 
    Node next = null; 
    int iteration = 1; // 标记迭代次数,方便区分每一轮循环
    while (current != null) { 
        next = current.next; // 先保存当前节点的下一个节点(即你说的currentNext)
        
        // 打印当前迭代的所有目标变量
        System.out.println("=== 第" + iteration + "次迭代 ===");
        // current此时一定非空,直接打印data
        System.out.println("current: " + current.data);
        // prev可能为null,判空后打印
        System.out.println("prev: " + (prev != null ? prev.data : "null"));
        // next(currentNext)可能为null,判空后打印
        System.out.println("next(currentNext): " + (next != null ? next.data : "null"));
        
        // 执行链表反转的核心逻辑
        current.next = prev; 
        prev = current; 
        current = next; 
        
        // 可选:打印反转后的状态,观察prev和current的变化
        System.out.println("反转后状态:prev = " + (prev != null ? prev.data : "null") + ", current = " + (current != null ? current.data : "null"));
        System.out.println("------------------------");
        iteration++;
    } 
    node = prev; 
    return node; 
}

关键改动说明

  • 调整打印位置:把打印操作移到current = next之前,此时current被循环条件current != null保证为非空,避免了访问current.data的NPE。
  • 判空处理:对prev和next(也就是你要的currentNext)使用三元表达式,当变量为null时打印字符串"null",否则打印对应的data值,彻底避免空指针。
  • 增加迭代标识:添加iteration变量标记循环次数,让输出结果更清晰,方便你跟踪每一步的变量变化。
  • 移除风险代码:删掉了原代码中System.out.print(node.data+"R"),因为node在循环中始终指向原链表头节点,如果传入空链表的话这里也会触发NPE,且这个打印的实用价值不高。

内容的提问来源于stack exchange,提问作者RITESH KUMAR

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 21:13:10