public class LinkedListStack implements Stack { private class Node { Node next; Object element; } private Node head = new Node(); private int size; @Override public boolean isEmpty() { return head.next == null; } @Override public boolean isFull() { return false; } @Override public int size() { return size; } @Override public Object top() throws StackEmptyException { if (isEmpty()) { throw new StackEmptyException(); } return head.next.element; } @Override public void push(Object element) throws StackFullException { Node node = new Node(); node.next = head.next; head.next = node; node.element = element; size++; } @Override public Object pop() throws StackEmptyException { if (isEmpty()) { throw new StackEmptyException(); } Object element = head.next.element; head.next = head.next.next; size--; return element; } @Override public void empty() { head.next = null; } }