判断链表顺序问题

来源:4-2 在链表中添加元素

慕神55941

2019-03-31

在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

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
3
杨保疆
哦,调用的add(index,e) 因为index==size,所以循环无法进去那么此时prev.next = head (此时head依旧是null),所以在new Node(e,null)。哈哈感谢哈
2019-09-10
共3条回复

玩转数据结构

动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…

6221 学习 · 1704 问题

查看课程