私はリストから特定の器官を削除するための削除関数を作成しようとしています。 NullPointerExceptionのエラーが発生する 私の間違いを知りたいです。 このエラーが発生するのはなぜですか。おかげさまで 一般的な二重リンクリストから削除する方法
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;
}
ノード:
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);
「head」が「null」または「head.prev」のいずれかです。 'head'はできません。あるいは、あなたは例外を1行早く得るでしょう。だから 'head.prev'はnullなので、' head.prev.next'に代入しようとするとNPEになります。 –
'head.prev'に言及していたはずのことは何でしたか?あなたのコードのすべての行を調べなければ、私はそれが 'null 'であると予想していました。 –
[NullPointerExceptionとは何か、それを修正する方法は?](http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it) ) –