2014-02-07 27 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; 
    } 
}