2013-05-01 61 views
-2

乾草我想爲我做的一個動態鏈接列表類快速排序方法。但我不斷得到一個NullPointerException,並不能解決原因。快速排序與動態鏈接列表

private void addToEnd(IntList y){ 
if(y.head != null){ 
     IntNode tmp = this.head; 
    while(tmp.getNext() != null){  //line 68 
    tmp = tmp.getNext(); 

} 
tmp.setNext(y.head); 
} 
    } 


public IntList Quicksort(){ 
if(this.length() > 1){ 
    IntList bList = new IntList(); 
    IntList sList = new IntList(); 
    IntList pivot = new IntList(); 

    pivot.addNode(head); 
    int pivotInt = this.head.getValue(); 
    IntNode test = this.head.getNext(); 

    while(test != null){ 

     if(test.getValue() > pivotInt){ 

      bList.addNode(test); 

     }else{ sList.addNode(test);} 

    test = test.getNext(); 
} 

    sList.Quicksort().addToEnd(pivot); 
    sList.addToEnd(bList.Quicksort()); 


} 
return this; 
} 

我得到了第68行的NullPointerException,不知道爲什麼。有人可以幫我從這裏出去嗎? 68號線是

while(tmp.getNext() != null){  //line 68 
+3

爲什麼? Quicksort是爲數組設計的。 – EJP 2013-05-01 22:59:41

+1

-1,請發佈堆棧跟蹤和錯誤所在的行。我們不會計算68條線路來免費幫助陌生人。 – Doorknob 2013-05-01 23:01:20

+0

我知道,但我已被要求,所以我是誰不同意:) – 1ftw1 2013-05-01 23:02:00

回答

1

我正在逐漸線68 NullPointerException異常,而且不知道爲什麼。

「爲什麼」 是tmp爲空:

IntNode tmp = this.head; 
while(tmp.getNext() != null){  //line 68 

換句話說this是一個IntList是在其headnull(我猜)。

但是否這是一個「有效」的狀態,並且(如果不是)它進入該狀態的方式是任何人的猜測。如果這是一個有效的狀態,那麼修正是重寫addToEnd來處理正確添加到空列表的情況;即this.head爲空。 (而不是像下面的意見建議作爲很簡單......但是這是一個顯然是一個學習的過程,這樣你就可以工作了就知道。)


(FWIW,整理到位鏈表永遠不會變得簡單或高效,簡單的方法是將列表元素複製到一個數組中,對數組進行排序,然後重新填充列表。)

+0

' while(tmp!= null){'真的能解決這個問題。 – 2013-05-01 23:09:06

+0

這就是假設有一個帶有'null'頭的IntList是有效的。我沒有準備好打電話......沒有看到其他代碼。 – 2013-05-01 23:11:42