
/**
 * Code for a generic stack.
 * 
 */
public class GenStack<E>
{
    GenLinkNode<E> head;
    private int numElements = 0;
    
    public E pop()
    {
        E ret;
        
        if ( head == null )
            ret = null;
        else
        {
            ret = head.element;
            head = head.next;
            numElements--; 
        }
        
        return ret;
 
    }
        
    public boolean isEmpty()
    {
        return( head == null );
    }
    
    public void push( E newElement )
    {
        GenLinkNode<E> newHead;
        newHead = new GenLinkNode<E>();
        newHead.next = head;
        newHead.element = newElement;
        head = newHead;
        numElements++;
    }
    
    public GenStackIterator<E> iterator()
    {
        return new GenStackIterator<E>( head );
    }

    public int size()
    {
        return( numElements );
    }
    
}

class GenLinkNode<E>
{
	E element;
	GenLinkNode<E> next;
}
