class LQueue<E> implements Queue<E> {
private Link<E> front;
private Link<E> rear;
private int size;
LQueue() { init(); }
LQueue(int size) { init(); }
void init() {
front = rear = new Link<E>(null);
size = 0;
}
public boolean enqueue(E it) {
rear.setNext(new Link<E>(it, null));
rear = rear.next();
size++;
return true;
}
public E dequeue() {
if (size == 0) { return null; }
E it = front.next().element();
front.setNext(front.next().next());
if (front.next() == null) { rear = front; }
size--;
return it;
}
public E frontValue() {
if (size == 0) { return null; }
return front.next().element();
}
public int length() { return size; }
public boolean isEmpty() { return size == 0; }
public void clear(){
rear = front;
size = 0;
}
}