public class LinkedQueue implements Queue { private static class Elem { private T value; private Elem next; private Elem(T value, Elem next) { this.value = value; this.next = next; } } private Elem front; private Elem rear; private int size; public LinkedQueue() { size = 0; } public int size() { return size; } public void enqueue(E value) { Elem newElem; newElem = new Elem(value, null ); if (rear == null) { front = rear = newElem; } else { rear.next = newElem; rear = newElem; } size++; } public E dequeue() { E result = front.value; if (front != null && front.next == null) { front = rear = null; } else { front = front.next; } size--; return result; } public boolean isEmpty() { return front == null; } }