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

Lio*_*cer 5 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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

错误:

Exception in thread "main" java.lang.NullPointerException
    at LinkedLists.LinkedListProblems.sortedInsert(LinkedListProblems.java:188)
Run Code Online (Sandbox Code Playgroud)

curr.next != null部分在intellij中突出显示,所以我假设这是导致错误.仅当我添加的值大于已排序链接列表的最后一个值时,才会出现此错误

但是,当迭代到链表的最后一个节点并且该节点的值仍然小于参数的值时.不应该退出while循环吗?

Ell*_*sch 6

我认为问题出在这里

while (curr.next.data < value && curr.next != null) {
  curr = curr.next;
}
Run Code Online (Sandbox Code Playgroud)

您正在以错误的顺序进行测试,首先检查null-

while (curr.next != null && curr.next.data < value) {
  curr = curr.next;
}
Run Code Online (Sandbox Code Playgroud)

否则,当curr.nextnull将已经测试curr.next.data < value,这将抛出一个NullPointerException.