我正在尝试构建一个删除功能,以从列表中删除特定的器官。 我收到NullPointerException错误 我想知道我的错误是什么。 为什么我收到此错误。 感谢。
删除特定器官的方法。该方法返回已删除的器官,器官实验室不在列表中,它返回null
import java.util.ListIterator;
import java.util.NoSuchElementException;
public class LinkedListDouble<T> {
private LDNode<T> head;
private LDNode<T> tail;
public int size;
LinkedListDouble(){
this.head = null;
size = 0;
}
public void add(T item){ // add item to the list
if(head == null ){
head = new LDNode<T>(item,null,null);
}
else{
LDNode<T> n = new LDNode<T>(item, null, null);
while(n.next != null ){
n = n.next;
}
n.next = new LDNode<T>(item,n,null);
}size++;
}
public T remove(T item){ // remove item from the list
T ans=null;
LDNode<T> n = head;
int i=0;
while(n.data != item){
n = n.next;
i++;
}
if(i == size) return null;
if(n == head) {
ans = head.data;
head.prev.next = head.next;
head.next.prev = head.prev;
head = head.next;
}
else {
ans = n.data;
n.prev.next = n.next;
n.next.prev = n.prev;
}
size--;
return ans;
}
public int size(){
return size;
}
节点
public class LDNode<T> {
T data;
LDNode<T> next,prev;
LDNode(){
next = null;
prev = null;
data = null;
}
/*LDNode(T data){
this(data,null,null);
}*/
LDNode(T data , LDNode<T> next , LDNode<T> prev){
this.data = data;
this.next = next;
this.prev = prev;
}
LDNode(LDNode<T> Other){
this.data = Other.data;
this.next = Other.next;
this.prev = Other.prev;
}
T getData(){
return data;
}
public void setNextNode(LDNode<T> next){
this.next = next;
}
public LDNode<T> getPrevNode(){
return prev;
}
public void setPrevNode(LDNode<T> prev){
this.prev = prev;
}
public void setData(T data){
this.data = data;
}
public LDNode<T> getNextNode(){
return next;
}
}
主要
public static void main(String[] args) {
LinkedListDouble<Integer> itay = new LinkedListDouble<>();
itay.add(1);
itay.add(2);
itay.add(3);
itay.add(4);
itay.add(5);
itay.add(6);
System.out.println(itay.size());
itay.remove(1);
System.out.println(itay.size());
}
错误:
Exception in thread "main" java.lang.NullPointerException
at Matala2.LinkedListDouble.remove(LinkedListDouble.java:45)//head.prev.next = head.next;
at Matala2.LinkedListDouble.main(LinkedListDouble.java:78) //itay.remove(1);
答案 0 :(得分:1)
第一个预见的问题是add
类的LinkedListDouble
方法。看,您正在创建head
,之后不要将其与LDNode
类的任何其他实例相关联。因此,head
总是null
为prev
,这就是您获得NPE的原因。此外,add
方法中的代码永远不会将null
与[{1}}对象的prev
值区别开来。请考虑修改LDNode
类的add
方法。