Я пытаюсь создать класс Deque (Stack/Queue, который можно добавить и ссылаться на обоих концах) путем реализации формата с двойным соединением.Iterable Deque NullPointerException
import java.util.Iterator;
общественного класса Deque реализует Iterable {
Node first;
Node last;
int size;
public Deque()
{
first = null;
last = null;
size = 2;
first.next = last;
last.prev = first;
}
private class Node
{
Node next;
Node prev;
Item item;
}
private class ListIterator implements Iterator<Item>
{
private Node current = first;
public boolean hasNext()
{
return current.next != null;
}
public Item next()
{
Item item = current.item;
current = current.next;
return item;
}
public void remove()
{
/* not supported */
}
}
public boolean isEmpty()
{
if(first == null&&last == null)
return true;
return false;
}
public int size()
{
return size;
}
public void addFirst(Item item)
{
Node oldfirst = first;
first = new Node();
first.item = item;
first.next = oldfirst;
oldfirst.prev = first;
size++;
}
public void addLast(Item item)
{
Node oldlast = last;
last = new Node();
last.item = item;
last.prev = oldlast;
oldlast.next = last;
size++;
}
public Item removeFirst()
{
Item item = first.item;
first = first.next;
size--;
return item;
}
public Item removeLast()
{
Item item = last.item;
last = last.next;
size--;
return item;
}
@Override
public Iterator<Item> iterator()
{
return (new ListIterator());
}
public static void main(String[] args)
{
Deque<Integer> deque = new Deque<Integer>();
for(int i=0; i<5; i++)
{
deque.addFirst(i);
deque.addLast(9-i);
}
for(Integer i : deque)
{
StdOut.println(i);
}
}
}
Когда я запускаю код, я получаю NullPointerException, когда он пытается сделать first.next = последний; Я могу понять, почему, но я не уверен, как исправить это, не нарушая список. Любые решения? Возможно, нет необходимости использовать двусвязный формат (т. Е. Вообще удалить основной ссылочный узел)?
Спасибо за помощь. И да, это для задания, которое строго определило, что я не могу использовать библиотеки за пределами приведенных. –