在while循环中到达时条件始终为true

时间:2014-07-29 05:18:06

标签: java linked-list

我创建了一个方法,将链接列表节点插入到已排序(增加)链表的正确位置,但我遇到了一些问题。

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循环吗?

3 个答案:

答案 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.nextnull时,它已经测试了curr.next.data < value,它会抛出NullPointerException

答案 1 :(得分:2)

看起来你的第一个应该是!= null,它应该是&amp;&amp;,否则即使root为null也可以评估root.data。

if (root != null && root.data >= value) {

答案 2 :(得分:2)

您在该行上收到例外情况,因为cur.next.datacur.next!=null之前接受了测试。

将它们交换过来,&&将被正确地短路,避免异常。