이중 연결 목록 형식을 구현하여 Deque 클래스 (양쪽 끝에 추가하고 추가 할 수있는 스택/큐)를 만들려고합니다.반복 가능 Deque NullPointerException
import java.util.Iterator;
공용 클래스 양단 큐의 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);
}
}
} 나는이 코드를 실행하면이 = 지난 first.next 할 시도 할 때
, 나는 NullPointerException이 수를 구현; 이유를 이해할 수는 있지만 목록을 위반하지 않고 해결하는 방법을 모르겠습니다. 어떤 해결책? 이중 연결된 형식 (즉, 이전 참조 노드를 모두 제거)을 사용하는 것이 불필요한가요?
감사합니다. 그리고 네, 이것은 주어진 라이브러리 밖에서 라이브러리를 사용할 수 없다고 엄격히 결정한 과제입니다. –