2014-02-07 24 views
0

我想寫一個方法,從一個單獨的鏈表中刪除一個值的所有實例,但我遇到了一些麻煩。我收到這個代碼的第8行一個NullPointerException:它是單鏈接列表nullpointerexception

public void remove (int value) 
{ 
    IntegerNode temp=head; 
    while (temp !=null) 
    { 
     if (temp.value == value) 
     { 
      temp.next = temp.next.next; 
      count--; 
     } 
     temp=temp.next; 
    } 
} 

不能肯定我在做什麼是咯出這個錯誤...

回答

0

當我讀到它時,如果temp.value等於value,你想從列表中刪除temp。但是,您的代碼有幾個錯誤:

  1. 您的代碼嘗試刪除temp.next而不是temp。
  2. 當temp.value等於最後一個元素(其中temp.next == null)中的值時,行temp.next = temp.next.next將觸發您的NullPointerException。
2

確保temp.nextnull

temp.next.next; 

它是更安全的使用如下

public void remove (int value){ 
    IntegerNode temp=head; 
    while (temp !=null){ 
    if (temp.value == value){ 
     if(temp.next!=null){ 
      temp.next = temp.next.next; 
      count--; 
     }   
     } 
    temp=temp.next; 
    } 
} 
0

這將在最後一次迭代中失敗:

temp.next = temp.next.next;

對於最後一個節點,temp.nextnull結果temp.next.next將拋出NPE。

0

更改您的if條件有點會導致錯誤可能在temp-> next爲null並且您執行temp-> next-> next時發生。

if (temp.value == value) 
     { 
     if(temp.next != null) 
      { 
      temp.next = temp.next.next; 
      } 
      count--; 
     } 
0

你的代碼試圖刪除temp.next而不是temp。

public void removeAll(int element){ 
    Node node = head; 
    Node prev = null; 
    while (node != null){ 
     if(node.key == element){ 
      if(node == head) 
       head = node.next; 
      else 
       prev.next = node.next; 
     } 
     else 
      prev = node; 
     node = node.next; 
    } 
}