public class LinkedStack implements Stack { private Node top; // reference to the head node private int size; // number of elements in the stack public LinkedStack() { // initializes an empty stack top = null; size = 0; } public int size() { return size; } public boolean isEmpty() { if (top == null) return true; return false; } public void push(Object elem) { Node v = new Node(); // create a new node v.setElement(elem); v.setNext(top); // link-in the new node top = v; size++; } public Object top() throws StackEmptyException { if (isEmpty()) throw new StackEmptyException("Stack is empty."); return top.getElement(); } public Object pop() throws StackEmptyException { if (isEmpty()) throw new StackEmptyException("Stack is empty."); Object temp = top.getElement(); top = top.getNext(); // link-out the former top node size--; return temp; } }