2017-03-01 227 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