public class Stack { public class Node { Symbol s; Node next; Symbol getSymbol(){return s;} Node getNext(){return next;} Node(Symbol ps, Node nl) { s = ps; next = nl; } } Node head; public Stack() { head = null; } public boolean isEmpty() { return head == null; } public void push(Symbol s) { head = new Node(s, head); } // requires !this.isEmpty() public Symbol pop() { Symbol s; if (head != null) { s = head.getSymbol(); head = head.getNext(); return s; } else return null; } // requires !this.isEmpty() public Symbol top() { Symbol s; if (head != null) { s = head.getSymbol(); return s; } else return null; } }