package edu.hawaii.ics.yucheng;
import java.util.NoSuchElementException;
/**
* Implementation of a generic linked list queue. This class exists only to
* support the JRE 1.5.10, which is currently installed on
* uhunix2.its.hawaii.edu.
*/
class LinkedListQueue<T> {
/**
* A node class for the generic queue.
*/
private static class Node<T> {
/** A pointer to the next node. */
private Node<T> myNext;
/** The value stored in the node. */
public final T value;
/**
* Initializes a new instance of the class.
*
* @param value The value stored in the node.
*/
public Node(final T value) {
this(value, null);
}
/**
* Initializes a new instance of the class.
*
* @param value The value stored in the node.
*
* @param next A pointer to the next node.
*/
public Node(final T value, final Node<T> next) {
this.value = value;
myNext = next;
}
/**
* Returns a pointer to the next node.
*
* @return A pointer to the next node.
*/
public Node<T> next() {
return myNext;
}
/**
* Sets the pointer to the next node.
*
* @param next A pointer to the next node.
*/
public void setNext(final Node<T> next) {
myNext = next;
}
}
private Node<T> myHead = null;
private Node<T> myTail = null;
/**
* Returns true if the collection contains no elements.
*
* @return true if this collection contains no elements
*/
public boolean isEmpty() {
return null == myHead;
}
/**
* Retrieves and removes the head of this queue.
*
* @return the head of this queue
*
* @throws NoSuchElementException if this queue is empty
*/
public T pop() {
if (null == myHead)
throw new NoSuchElementException();
final T value = myHead.value;
myHead = myHead.next();
if (null == myHead)
myTail = null;
return value;
}
/**
* Inserts the specified element into this queue.
*
* @param e the element to add
*/
public void push(final T e) {
if (null == myHead) {
myHead = new Node<T>(e);
myTail = myHead;
} else {
myTail.setNext(new Node<T>(e));
myTail = myTail.next();
}
}
/**
* Returns the string representation of the class data.
*
* @return The string representation of the class data.
*/
@Override
public String toString() {
final StringBuilder builder = new StringBuilder();
builder.append("{");
for (Node<T> node = myHead; node != null; node = node.next()) {
builder.append(" ");
builder.append(node.value);
builder.append(null == node.next() ? " }" : ",");
}
return builder.toString();
}
}