2013-03-01 165 views
1

我是剛剛學習Java的學生。我明天有一個很大的測試,我對某些代碼行感到困惑。鏈接列表後插入

該方法insertAfter在傳入方法的linkedList中查找數字,並在匹配後插入一個新節點。我不明白如何

curr.setNext(curr.getNext()) 

將帶我們到列表中的下一個節點,可能可能是我們正在尋找的數字。那麼這個命令如何通過鏈表來迭代我們呢?

curr = curr.getNext()會更合理嗎?

謝謝,對不起,如果這是很簡單的......我此刻

// assume firstInList is in the list 
public void insertAfter(int firstInList, Node toAdd){ 
    Node curr = head; 

    while(curr.getData() != firstInList){ 
     curr.setNext(curr.getNext()); 
    } 

    curr.setNext(toAdd);   
} 


    Node class 
    { 
    int getData() {return data}; 
    void setData(int data) {this.data =data}; 
    Node getNext() {return next}; 
    void setNext(Node next) {this.next = next}; 
    } 

}

其他方法 的方法被稱爲很困惑

public void insertBefoe (Node, inList, Node toAdd) 
+1

這段代碼來自哪裏? – UmNyobe 2013-03-01 08:57:59

+0

@UmNyobe筆記我的教授給了我,但沒有解釋爲什麼它寫的方式是 – Teddy13 2013-03-01 08:58:39

+1

也顯示類節點。這看起來不正確... – UmNyobe 2013-03-01 09:00:50

回答

0

代碼看起來不正確。

頭從哪裏來?看起來就再也回不來了while循環了,除非setNext(..)某種程度上也改變了getData()

Unfortuantly其難度的代碼,以幫助,因爲我們沒有全貌

+0

謝謝謝爾文的回覆......我用Node類編輯了我的問題..也許它會更有幫助。只是名單的開始......假設我們有這個全球參考anks – Teddy13 2013-03-01 09:05:51

+0

好的,正如代碼現在所讀,它的破碎。它不起作用。這將是一個無限循環,因爲getData()永遠不會等於firstInList – 2013-03-01 09:15:33

1

它似乎很明顯,代碼應爲:

curr = curr.getNext() 

代替

curr.setNext(curr.getNext()); 

此外,以下壞:

curr.setNext(toAdd);   

執行此操作後,列表中的下一部分firstInList將會丟失。

+0

這就是我所說的NPE。所以我的教授寫錯了?你也可以向我解釋爲什麼curr.setNext(toAdd)會出錯嗎?如果我們使用curr = curr.getNext(),它是否有意義。謝謝! – Teddy13 2013-03-01 09:08:35

+2

@ Teddy13:如果這意味着來自教授的工作代碼,我認爲你需要一位新教授。作爲'curr.setNext(toAdd)',考慮在原始列表中的'firstInList'後面的元素會發生什麼。 – NPE 2013-03-01 09:09:58

+0

那麼你會如何去保持firstInList?謝謝...會接受 – Teddy13 2013-03-01 09:19:57