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

LinkedList打印元素触发NullPointerException,求修复方案

修复LinkedList打印时的NullPointerException问题

你这段代码里有两个关键错误导致了print()方法触发空指针异常:

  1. add()方法没正确设置头节点:
    当链表刚创建还没有节点时,node是null,你把局部变量curr赋值为新节点,但根本没修改成员变量node,导致node一直是null。而且第一次添加节点时,还会把新节点的next指向自己,搞出循环引用。

  2. print()方法没处理空链表,遍历逻辑有问题:
    因为node一直是null,print()里curr = node也成了null,直接访问curr.next肯定触发空指针。另外原代码用curr.next != null来循环,最后单独打印最后一个节点,这种写法既冗余,又完全没考虑链表为空的情况。


修复后的完整代码

class LinkedLists {

    private Node node;  

    public LinkedLists() {  
        
    }

    public void add(int d) {
        Node newNode = new Node(d);
        // 链表为空时,直接把新节点设为头节点
        if (node == null) {
            node = newNode;
            return;
        }
        // 链表非空,遍历到最后一个节点
        Node curr = node;
        while (curr.next != null) {
            curr = curr.next;       
        }       
        curr.next = newNode;
    }

    public void print() {
        Node curr = node;
        // 从第一个节点开始遍历,直到所有节点处理完
        while (curr != null) {
            System.out.println(curr.data);
            curr = curr.next;
        }
    }

    public static void main(String[] args) {
        LinkedLists list = new LinkedLists();
        list.add(3);
        list.add(12);
        list.add(99);
        list.add(6);
    
        list.print();       
    }
}

public class Node {
    Node next;
    int data;

    public Node(int d) {
        data = d;
        next = null;        
    }
}

修复说明:

  • add()方法:
    • 先判断链表是否为空,是的话直接把node指向新节点,然后返回,避免后续错误操作。
    • 非空链表再正常遍历到末尾添加新节点。
  • print()方法:
    • 改用curr != null作为循环条件,从头节点开始逐个打印,直到所有节点处理完毕,不用单独处理最后一个节点。
    • 天然兼容空链表的情况(此时循环不会执行,不会报错)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 10:16:32