2017-03-01 133 views
-1

我想从最小到最大插入排序随机整数到链表中。每次我运行这个方法时,它都会开始排序和打印,但最终会给我一个nullpointerexception?任何帮助表示赞赏。试图插入排序链接列表

public void insertInOrder(int x) { 
    if (head == null) { 

     head = new Node(x); 

    } else { 
     Node prev; 
     Node curr; 

     for (prev = null, curr = head; 
      (curr != null) && (x > curr.getNumber()); 
      prev = curr, curr = curr.getNext()) {} 

     if (prev == null) { 
      insertAtHead(x); 
     } 

     if (curr == null) { 
      insertAtTail(x); 
     } else { 
      Node nNex = new Node(x); 
      nNex.setNext(curr); 
      prev.setNext(nNex); // NullPointerException is raised here 
     } 
    } 
} 
+0

NullPointerException发生在哪里? – gus27

+0

at prev.setNext(nNex); – Brendon

+0

在检查'prev == null'之后,'prev'变量不会再被更新/更改。所以在'prev.setNext()'看来不可避免的是引发了NullPointerException。 – gus27

回答

0

你应该做的,如果,否则,如果和else语句而不是双if和else:

这是你必须

if (prev == null) { 
    insertAtHead(x); 
} 

if (curr == null) { 
    insertAtTail(x); 
} else { 
    Node nNex = new Node(x); 
    nNex.setNext(curr); 
    prev.setNext(nNex); 
} 

您检查分组为空,如果它是在第一个if语句中进行的,但如果curr为null,那么当您输入else语句时prev仍然为空。你应该这样做:

if (prev == null) { 
    insertAtHead(x); 
} 

else if (curr == null) { 
    insertAtTail(x); 
} else { 
    Node nNex = new Node(x); 
    nNex.setNext(curr); 
    prev.setNext(nNex); 
} 
+0

感谢您的帮助!这工作完美。 – Brendon

+0

很高兴帮助!将答案标记为问题的正确答案 – Ricardo