У меня проблемы с двойным LinkedList, и я не использую хвост, вместо этого я использую текущий указатель.Когда я использую хвост, я не нахожу проблему, но когда я использую текущий указатель, я получаю ошибку и не могу ее решить.Это происходит, когда я удаляю узел.Моя программа работает, но я не могу удалить следующий узел.Это сообщение об ошибке:
Это класс DNode
public class DNode<T> {
T data;
DNode<T> next;
DNode<T> prev;
public DNode(T e){
data = e;
next = prev = null;
}
Этот класс DoubleLinkedList
public class DoubleLinkedList<T> {
DNode<T> head;
DNode<T> current;
int size = 0;
public DoubleLinkedList() {
head = current = null;
}
public void Insert(T e) {
DNode<T> tmp = new DNode(e);
if (size == 0) {
head = current = tmp;
} else {
tmp.next = current.next;
tmp.prev = current;
current.next = tmp;
current = tmp;
}
size++;
}
public void remove() {
if (head == current) {
if (current.next == null) {
head = current = null;
} else {
current.next.prev = null;
head = current.next;
current.next = null;
current = head;
}
} else {
DNode<T> tmp = current.next;
current.prev.next = tmp;
if (tmp != null) {
tmp.prev = current;
}
current.next = current.prev = null;
current = tmp;
}
size--;
}
Основной запрос
public static void main(String[] args) {
DoubleLinkedList<String> d = new DoubleLinkedList();
d.Insert("jon");
d.Insert("jack");
d.Insert("mohammed");
d.remove();
d.remove();// here my problem
}
В строке с комментарием я получаю сообщение об ошибке.