import java.util.*;

/**
 * A stack implemented using an ArrayList
 * 
 * @author dave
 * @date 2/22/2010
 *
 * @param <E>
 */
public class LinkedStack<E> implements Stack<E>, Linear<E> {
	private LinkedList<E> list = new LinkedList<E>();

	public void push(E item) {
		list.addFirst(item);
	}
	
	public E pop() {
		assert !empty();
		
		return list.removeFirst();
	}
	
	public E peek() {
		assert !empty();
		
		return list.getFirst();
	}

	public boolean empty() {
		return list.isEmpty();
	}
	
	// ---------------- Just added for compatibility with Linear
	public void add(E item) {
		push(item);
	}

	public E remove() {
		return pop();
	}	
}