// 移除链表 元素
public void remove(Object b)
{
// TODO Auto-generated method stub
if (size == 0)
{
System.out.println("链表为空,无法删除");
return;
}
Node current = this.first;
while (current != null)
{
if (current.element.equals(b) )//如果当前节点的元素值 为需要找的值 即为找到了 则进行下面的操作
{
//找到了 则进行删除 操作
if (current == first)
{
current.next.prev = null;
first = current.next;
current.next = null;
} else if (current == last)
{
current.prev.next = null;
last = current.prev;
current.prev = null;
} else
{
current.prev.next = current.next;
current.next.prev = current.prev;
}
//删除后 size减1
size--;
return;//删除后则可以返回,如不返回 则会出现空指针异常 因为此时current指向删除节点 在117行
} else
{
current = current.next;
}
}
throw new InputMismatchException("没有您输入的元素");
}
}
请问找到元素 删除后为什么不返回就会出现空指针(空引用)异常,虽然元素已经删除 ,但是他的prev和next应该还有引用啊
找到元素后,有3种情况,
1,该元素是第一个,
current.next.prev = null;
first = current.next;
如果不return的话,第一次进入时把current.next设成null了,
第二次再进入时,【current.next.prev = null;】=【null.prev = null;】会出空指针异常。
2,该元素是最后一个
current.prev.next = null;
last = current.prev;
原理同1
如果不return的话,会陷入死循环