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

有序链表add方法抛出NullPointerException问题排查求助

问题分析与修复方案

我来帮你定位这个NullPointerException的问题,以及给出完整的修复代码:

问题根源

你遇到的空指针问题出在while (temp.value <= num)这一行,原因是当你添加第二个节点时:

  • 假设第一个节点的值是3,现在要添加5,temp初始指向head(值为3的节点)
  • 第一次循环判断3 <= 5成立,执行temp = temp.next,此时temp变成null(因为第一个节点的next还没有赋值)
  • 下一次循环会尝试访问null.value,直接触发空指针异常

除此之外,你的代码还有两个隐藏问题:

  1. 当temp变为null后,后续的if (temp.next==null)也会触发空指针
  2. 插入中间节点的代码newNode.next=temp.next.next是错误的,会跳过一个节点

修复后的完整代码

下面是修正后的代码,覆盖了所有插入场景(头部、中间、尾部):

public class Node {
    int value;
    Node next;

    public Node() {}

    public Node(int c) {
        this.value = c;
    }

    public boolean hasNext() {
        return next != null;
    }
}

public class SortedList {
    Node head;
    public int listCount;

    public SortedList() {
        listCount = 0;
        this.head = null;
    }

    public void add(int num) {
        Node newNode = new Node(num);
        // 处理空链表的情况
        if (head == null) {
            head = newNode;
            listCount++;
            System.out.println("Node with data " + num + " was added.");
            return;
        }

        Node temp = head;
        Node prev = null;
        // 找到第一个值大于num的节点,prev记录它的前一个节点
        while (temp != null && temp.value <= num) {
            prev = temp;
            temp = temp.next;
        }

        // 场景1:num比所有节点都小,插入到头部
        if (prev == null) {
            newNode.next = head;
            head = newNode;
        } else {
            // 场景2/3:插入到中间或尾部
            newNode.next = prev.next;
            prev.next = newNode;
        }
        listCount++;
        System.out.println("Node with data " + num + " was added.");
    }
}

修复说明

  1. 循环条件优化:先判断temp != null,再访问temp.value,彻底避免空指针
  2. 增加prev指针:跟踪当前节点的前一个节点,确保能精准找到插入位置
  3. 覆盖所有场景:
    • 空链表直接赋值head
    • num最小:插入到链表头部
    • num最大:插入到链表尾部
    • num在中间:插入到对应位置
  4. 修正插入逻辑:把错误的newNode.next=temp.next.next改成newNode.next=prev.next,保证链表节点连续无跳跃

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:02:44