请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

判断链表顺序问题

在leetcode中回答问题时做了头结点的判断

if (head.next == null || head == null)
            return head;

当测试用例用空链表时,leetcode编译出错
java.lang.NullPointerException
at line 3, Solution.deleteDuplicates
at line 54, DriverSolution.helper
at line 79, Driver.main
而改变顺序时编译成功

if (head == null || head.next == null)
            return head;

而我在interllij编译时两者都可以成功,因为我对Java的原理还不了解,请问老师这是为什么呢

正在回答

1回答

liuyubobobo 2019-03-31 12:32:14

if (head == null || head.next == null)

先判断head是否为空?为空,这个if直接成立了,return head

不为空,看后面的条件,head.next是否为空?

所以,在看head.next的时候,head肯定不为空了。


但是,

if (head.next == null || head == null)
先看head.next是否为空。

可是此时,head可能为空,调用head.next,就会抛空指针异常。


P.S.

这不是一个编译错误,是一个运行错误。所以,你在IntelliJ下编译不会报错。但是传一个空链表进去,一样报空指针异常。


继续加油!:)

0 回复 有任何疑惑可以回复我~
  • 提问者 慕神55941 #1
    谢谢老师
    回复 有任何疑惑可以回复我~ 2019-03-31 17:43:55
  • 在4-2中给链表最后添加一个元素,我们是不是没有将最后一个元素的next给置为null呢。
    回复 有任何疑惑可以回复我~ 2019-09-10 08:47:48
  • 哦,调用的add(index,e) 因为index==size,所以循环无法进去那么此时prev.next = head (此时head依旧是null),所以在new Node(e,null)。哈哈感谢哈
    回复 有任何疑惑可以回复我~ 2019-09-10 08:50:47
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信