2016-11-15 59 views
0

我需要爲我的整數數組創建一個單鏈表,但是,我不知道現在我的代碼有什麼錯誤。爲什麼我無法從數組創建單個鏈接的列表?

這是創建節點的代碼。 (的數據)

package sllset; 

class SLLNode { 
    int value; 
    SLLNode next; 

public SLLNode(int i, SLLNode n){ 
    value = i; 
    next = n 
    } 
} 

我的其他類有我的方法和構造函數看起來像這樣。

package sllset; 


public class SLLSet { 
    private int setSize; 
    private SLLNode head; 

public SLLSet(){ 
    head = null; 
    setSize = 0; 
} 

public SLLSet(int[] sortedArray){ //second constructor 
    setSize = sortedArray.length; 
    int i; 
    head=null; 
    for(i=0;i<setSize;i++){ 
     head.next = head; 
     head = new SLLNode(sortedArray[i],head.next);  
    } 
} 


public String toString(){ 
    SLLNode p; 
    String result = new String(); 
    for(p=head ; p!=null ; p=p.next) 
     result += p.value; 
    return result; 
} 

public static void main(String[] args) { 
int[] A = {2,3,6,8,9}; 
SLLSet a = new SLLSet(A); 
System.out.println(a.toString()); 

    } 

} 

我的問題是,我的第二個構造函數不工作,我真的不知道爲什麼。我一直在關注如何使這些功能大部分功能的指導,所以我對代碼的瞭解我認爲不足以解決問題。

編輯:所以有人告訴我指定的問題,我在第19行得到一個NULLPointerException;我的代碼是head.next = head; 。然而,當我 刪除該部分測試,第20行得到錯誤信息

+0

它不起作用?你怎麼知道的? – shmosel

+0

我嘗試過運行它 – joeymed

+0

@shmosel很有趣 –

回答

1

讓我們來看看這個

head=null;  // you are setting head to null 
for(i=0;i<setSize;i++){ 
    head.next = head; // see two lines up, head is null, it can not have next 

你的構造有一些問題。嘗試使用此版本:

public SLLSet(int[] sortedArray){ //second constructor 
    head = null; 
    if (sortedArray == null || sortedArray.length == 0) { 
     setSize = 0; 
    } 
    setSize = sortedArray.length; 
    head = new SLLNode(sortedArray[0], null); 
    SLLNode curr = head; 

    for (int i=1; i < setSize; ++i) { 
     curr.next = new SLLNode(sortedArray[i], null); 
     curr = curr.next; 
    } 
} 
+0

這段代碼是不是表示在循環之前我的head = null(除了null之外,沒有任何內容在列表中)。那麼當我開始循環整數值null將被移動到右側? OHH還是這意味着我的下一個頭(頭是指列表的開頭是吧?)我基本上說下一個值是空的嗎? – joeymed

+0

是的,當您創建每個新節點時,下一個值默認爲'null'。鏈表是如何工作的,它必須在某個地方結束。嘗試一下代碼,然後回到這裏評論。 –

+0

我試過給出的代碼,但似乎有一個錯誤:不兼容的源代碼 - 錯誤的sym類型:sllset.SLLSet.SLLNode。在curr.next = SLLNode(sortedArray [i],null)。編輯:沒關係,我通過在它前面添加新來修復它。似乎已經修復了它 – joeymed

相關問題