Ich versuche eine Entfernungsfunktion zu erstellen, um ein bestimmtes Organ aus der Liste zu entfernen. Ich bekomme einen Fehler von NullPointerException Ich würde gerne wissen, was mein Fehler ist. Warum bekomme ich diesen Fehler? Danke.So entfernen Sie aus der generischen doppelt verketteten Liste
A method to delete a specific organ. The method returns the deleted organ, organ lab is not on the list, it returns 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;
}
Knoten:
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;
}
}
Main:
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());
}
Fehler:
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);
Entweder 'head' ist' null' oder 'head.prev' ist. 'Kopf' kann nicht sein, sonst hättest du eine Zeile früher die Ausnahme bekommen. So ist 'head.prev' gleich null, so dass Sie versuchen,' head.prev.next' zuzuweisen, gibt NPE. –
Was hatten Sie erwartet, dass sich 'head.prev' darauf beziehen sollte? Ohne jede Zeile in Ihrem Code zu studieren, hätte ich erwartet, dass es "null" ist. –
Mögliches Duplikat von [Was ist eine NullPointerException, und wie behebe ich sie?] (Http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it) –