2014-10-19 138 views
0

嘗試在JAVA中連接兩個鏈接列表時,我遇到了NullPointExceptions問題。連接2個鏈接列表 - Java

主來測試它的代碼是:

d1 = new MyDeque(); 
d2 = new MyDeque(); 
d2.pushLeft (11); 
d1.concat (d2); 

雖然對concat函數的代碼是:

public void concat (MyDeque that) { 

    if (!that.isEmpty()) 
    { 
     this.last.next = that.first; 
     this.N += that.N; 

     that.first = null; 
     that.last = null; 
     that.N = 0; 
    } 
} 

,我不明白的部分是它的標誌NullPointerException異常。 「d2」或那個不是空的,而「d1」是,這種類型讓我明白會有一個空值「d1」,指向「d2」中的第一個值,也就是11。 last.next = that.first。如果「d1」也是空的,我應該做出另一種不同的處理方式嗎?

+1

會發生什麼,如果第一個列表是空的:) – nmore 2014-10-19 02:20:09

+0

我很困惑。我假定一個鏈表將通過將其他列表添加到其自身的末尾來連接,更新其大小計數並將其尾指針移動到其他尾指針當前指向的相同位置。你正在做三個中的兩個;你爲什麼要獲得NPE? **你在哪裏獲得NPE? – Makoto 2014-10-19 02:20:58

+0

@nmore this.last = that.first? – user2909869 2014-10-19 02:21:13

回答

1

雖然我沒有你的整個節點類,但我發現有2個可能的地方讓你有NullPointerException。

(1)

if (!that.isEmpty()) 

您應該驗證(that != null)。如果that爲空,您的代碼將拋出NullPointerException。

(2)

this.last.next = that.first; 

您的代碼將拋出一個NullPointerException如果this.last爲null。確保它不是,或事先檢查。

+1

是的,這就是我的想法。如果this.last是一個空值,你會反而只是說this.last = that.first? – user2909869 2014-10-19 02:39:16

+0

是的,你會的。 – 2014-10-19 03:29:34

0

確保您檢查下一個節點不爲空

while (list.next != null)

是標準的方法,如果您使用的是自定義的結束標記,可能會略有不同