我创建了一个方法,将链接列表节点插入到已排序(增加)链表的正确位置,但我遇到了一些问题。
public static void sortedInsert(LinkedListNode root, int value) {
LinkedListNode newNode = new LinkedListNode(value);
if (root == null || root.data >= value) {
newNode.next = root;
} else {
LinkedListNode curr = root;
while (curr.next.data < value && curr.next != null) {
curr = curr.next;
}
newNode.next = curr.next;
curr.next = newNode;
}
}
错误:
Exception in thread "main" java.lang.NullPointerException
at LinkedLists.LinkedListProblems.sortedInsert(LinkedListProblems.java:188)
curr.next != null
部分在intellij中突出显示,因此我假设这是导致错误的。仅当我添加的值大于已排序链接列表的最后一个值
但是,当迭代到链表的最后一个节点并且该节点的值仍然小于参数的值时。不应该退出while循环吗?
答案 0 :(得分:6)
我认为问题出在这里
while (curr.next.data < value && curr.next != null) {
curr = curr.next;
}
您正在以错误的顺序进行测试,首先检查null
-
while (curr.next != null && curr.next.data < value) {
curr = curr.next;
}
否则当curr.next
为null
时,它已经测试了curr.next.data < value
,它会抛出NullPointerException
。
答案 1 :(得分:2)
看起来你的第一个应该是!= null,它应该是&amp;&amp;,否则即使root为null也可以评估root.data。
if (root != null && root.data >= value) {
答案 2 :(得分:2)
您在该行上收到例外情况,因为cur.next.data
在cur.next!=null
之前接受了测试。
将它们交换过来,&&
将被正确地短路,避免异常。