LinkedList打印元素触发NullPointerException,求修复方案
修复LinkedList打印时的NullPointerException问题
你这段代码里有两个关键错误导致了print()方法触发空指针异常:
add()方法没正确设置头节点:
当链表刚创建还没有节点时,node是null,你把局部变量curr赋值为新节点,但根本没修改成员变量node,导致node一直是null。而且第一次添加节点时,还会把新节点的next指向自己,搞出循环引用。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
相关产品推荐
相关产品推荐

