作者在刚学习链表的时候,有一次碰到空指针异常,怎么都想不通,想到大家可能碰见同样的问题,就将作者学习的一些过程分享出来,希望对大家能够有一丢丢帮助
while(result!=null){
result.val=l1.val+l2.val;
l1=l1.next;
l2=l2.next;
result=result.next;
}
按照链表的结构,我们想要顺着链表一个一个向后找 ,逻辑上没有问题,但是
出现了一个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了嘛!!!
扫描二维码关注公众号,回复:
8536375 查看本文章
总结一下:
Java语言中除了各种基本类型数据以外,其他所有引用类型数据都需要经过初始化才能够使用,尤其是像链表、树这些数据结构,它们通过节点的链接来存储数据,使用时不仅要考虑自身是否初始化,还要考虑后面的节点是否初始化。
希望这篇文章能够帮到大家,如果我的文章有问题,欢迎批评指正。如果您还有哪里不理解,也欢迎留言,我们 一起讨论学习