38 lines
883 B
Java
38 lines
883 B
Java
//: generics/LinkedStack.java
|
|
// A stack implemented with an internal linked structure.
|
|
|
|
public class LinkedStack<T> {
|
|
private static class Node<U> {
|
|
U item;
|
|
Node<U> next;
|
|
Node() { item = null; next = null; }
|
|
Node(U item, Node<U> next) {
|
|
this.item = item;
|
|
this.next = next;
|
|
}
|
|
boolean end() { return item == null && next == null; }
|
|
}
|
|
private Node<T> 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<String> lss = new LinkedStack<>();
|
|
for(String s : "Phasers on stun!".split(" "))
|
|
lss.push(s);
|
|
String s;
|
|
while((s = lss.pop()) != null)
|
|
System.out.println(s);
|
|
}
|
|
} /* Output:
|
|
stun!
|
|
on
|
|
Phasers
|
|
*///:~
|