public class LinkedListQueue implements Queue {
private class Node {
Node prev;
Node next;
A item;
Node(Node prev, Node next, A item) {
this.next = next;
this.prev = prev;
this.item = item;
}
}
Node head = null;
Node tail = null;
public boolean isEmpty() {
return head == null;
}
public void enqueue(A x) {
tail = new Node(tail, null, x);
if (head == null) {
head = tail;
}
if (tail.prev != null) {
tail.prev.next = tail;
}
}
public A dequeue() throws Exception {
if (isEmpty()) {
throw new Exception();
}
A result = head.item;
head = head.next;
if (head != null) {
head.prev = null;
} else {
tail = null;
}
return result;
}
public static void main(String[] args) {
LinkedListQueue myQueue = new LinkedListQueue();
try {
myQueue.enqueue(10);
myQueue.enqueue(9);
System.out.println(myQueue.dequeue());
myQueue.enqueue(4);
myQueue.enqueue(2);
System.out.println(myQueue.dequeue());
System.out.println(myQueue.dequeue());
System.out.println(myQueue.dequeue());
System.out.println(myQueue.isEmpty());
} catch (Exception e) {
}
}
}