2015-04-20 15:36:01 -07:00
|
|
|
|
//: generics/LinkedStack.java
|
2015-05-29 14:18:51 -07:00
|
|
|
|
// <20>2015 MindView LLC: see Copyright.txt
|
2015-04-20 15:36:01 -07:00
|
|
|
|
// 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; }
|
|
|
|
|
}
|
2015-05-05 11:20:13 -07:00
|
|
|
|
private Node<T> top = new Node<>(); // End sentinel
|
2015-04-20 15:36:01 -07:00
|
|
|
|
public void push(T item) {
|
2015-05-05 11:20:13 -07:00
|
|
|
|
top = new Node<>(item, top);
|
2015-05-18 23:05:20 -07:00
|
|
|
|
}
|
2015-04-20 15:36:01 -07:00
|
|
|
|
public T pop() {
|
|
|
|
|
T result = top.item;
|
|
|
|
|
if(!top.end())
|
|
|
|
|
top = top.next;
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
public static void main(String[] args) {
|
2015-05-05 11:20:13 -07:00
|
|
|
|
LinkedStack<String> lss = new LinkedStack<>();
|
2015-04-20 15:36:01 -07:00
|
|
|
|
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
|
|
|
|
|
*///:~
|