package generics; /** * RUN: * javac generics/LinkedStack.java && java generics.LinkedStack * OUTPUT: * stun! * on * Phases */ public class LinkedStack { private static class Node { U item; Node next; Node() { item = null; next = null; } Node(U item, Node next) { this.item = item; this.next = next; } boolean end() { return item == null && next == null; } } private Node top = new Node(); // end sentinel !!! public void push(T item) { top = new Node(item, top); } public T pop() { T result = top.item; if (! top.end()) { top = top.next; } return result; } public static void main(String[] args) { LinkedStack lss = new LinkedStack(); for (String s : "Phases on stun!".split(" ")) { lss.push(s); } String s; while((s = lss.pop()) != null) { System.out.println(s); } } }