2012-05-08 162 views
0

下面的分隔符方法用於返回兩個單獨鏈接列表的IntLinkedBag數組。它通過調用listSplitLessGreater方法來完成此操作,並傳遞整數鏈接列表的頭引用和分離器整數值,該整數值返回一個IntNode數組,該數組包含已排序的兩個新的鏈接的整數鏈表的頭引用。分割器方法按照書面方式工作。這是我能夠實現它的唯一方法。但我知道必須有一個更簡單/更好的方法來編碼它。之間的一切// * ** * ** * *我想這個鏈接列表頭參考分配給Java中的鏈接列表對象

newLists[0].head = answer[0]; 
newLists[1].head = answer[1]; 

取代但是當我做我運行程序時收到空指針錯誤豁免。我的問題是爲什麼?以及如何編寫此代碼的正確方法?

public IntLinkedBag[] splitter(int target) 
{ 
    IntLinkedBag[] newLists = new IntLinkedBag[2]; 
    IntNode[] answer = new IntNode[2]; 
    answer = IntNode.listSplitLessGreater(head, target); 

    //********************************** 
    IntLinkedBag b = new IntLinkedBag(); 
    IntLinkedBag c = new IntLinkedBag(); 
    b.add(5); 
    b.head = answer[0]; 
    newLists[0] = b; 
    c.add(5); 
    c.head = answer[1]; 
    newLists[1] = c; 
    //********************************** 

    return newLists; 
} 

我更新了我的代碼,如下所示。我沒有收到任何錯誤,但現在沒有任何回報。即使測試代碼打印鏈接列表....和想法?

public IntLinkedBag[] splitter(int target) 
{ 
    IntLinkedBag[] newLists = {new IntLinkedBag(), new IntLinkedBag()}; 

    IntNode[] answer = new IntNode[2]; 
    answer = IntNode.listSplitLessGreater(head, target); 


     newLists[0].head = answer[0]; 
    newLists[1].head = answer[1]; 



    System.out.println(IntNode.showList(newLists[0].head)); //test code 
    System.out.println(IntNode.showList(newLists[1].head)); //test code 

    return newLists; 
} 

添加此代碼得到它的工作,但爲什麼這是必需的?

newLists[0].add(5); //adding a number to linked list to create a temporary head. 
newLists[1].add(5); //don't know why I have to have this but its only way code works correctly 

回答

4

沒有什麼的newlists[0]newlists[1]裏面居然初始化;該陣列在創建時創建默認值null

嘗試這樣:

IntLinkedBag[] newLists = new IntLinkedBag[2]; 
for(int i = 0; i < newLists.length; i++) { 
    newLists[i] = new IntLinkedBag(); 
} 

更加緊湊,你可以這樣做:

IntLinkedBag[] newLists = {new IntLinkedBag(), new IntLinkedBag()}; 

,做同樣的事情沒有環。

+0

我按照上面的說明操作。任何進一步的想法? – user1371651

+0

@ user1371651:至於你的編輯,我不能在這個特定的問題中回答這個問題(你只是在尋找一種更好的編碼方式)。您必須創建一個新頭或調用add(int)的原因完全取決於您實現「IntLinkedBag」類的方式。除非首先調用'add(int)',否則它不會返回任何東西,這也是我不能回答爲什麼沒有看到它的實現(此時會有點太多)。 – Makoto

+0

感謝您的幫助誠! – user1371651