Java——使用链表出现空指针异常 Exception in thread "main" java.lang.NullPointerException

作者在刚学习链表的时候,有一次碰到空指针异常,怎么都想不通,想到大家可能碰见同样的问题,就将作者学习的一些过程分享出来,希望对大家能够有一丢丢帮助


		while(result!=null){
			result.val=l1.val+l2.val;
			l1=l1.next;
			l2=l2.next;
			result=result.next;
		}

按照链表的结构,我们想要顺着链表一个一个向后找 ,逻辑上没有问题,但是

Java——使用链表出现空指针异常 Exception in thread

出现了一个error,显示空指针异常那我们来找一下报错的第27行(22行主方法error是因为调用了add方法) 

 

显示这句话有问题,想不出来,通过打断点来寻找一下问题

打断点发现,循环第一次没有问题,而循环第二次的时候 显示result为空,这是为什么呀?

我们分明已将result初始化了

原因是我们没有将result.next,也就是result的下一个节点初始化,我们在第一次循环中,将result指向了它的他一个节点,此时result已经不是一开始的result,它代表的是result.next因此,报null是因为没有将result.next初始化,将它初始化一下问题就解决了

while(l1!=null||l2!=null){
			result.val=l1.val+l2.val;
			l1=l1.next;
			l2=l2.next;
			result.next=new ListNode(0);
			result=result.next;
		}

有的朋友也许会问,这样不就使result这个链表多出一位数来嘛。影响结果了呀, 这个问题通过if语句判断一下不就ok了嘛!!!

 

总结一下:

Java语言中除了各种基本类型数据以外,其他所有引用类型数据都需要经过初始化才能够使用,尤其是像链表、树这些数据结构,它们通过节点的链接来存储数据,使用时不仅要考虑自身是否初始化,还要考虑后面的节点是否初始化。

 

希望这篇文章能够帮到大家,如果我的文章有问题,欢迎批评指正。如果您还有哪里不理解,也欢迎留言,我们 一起讨论学习

你可能感兴趣的:(Java)