2015-09-07 11:44:36 -06:00
|
|
|
// generics/LinkedStack.java
|
2021-01-31 15:42:31 -07:00
|
|
|
// (c)2021 MindView LLC: see Copyright.txt
|
2015-11-15 15:51:35 -08:00
|
|
|
// We make no guarantees that this code is fit for any purpose.
|
2016-09-23 13:23:35 -06:00
|
|
|
// Visit http://OnJava8.com for more book information.
|
2016-01-25 18:05:55 -08:00
|
|
|
// A stack implemented with an internal linked structure
|
2015-06-15 17:47:35 -07:00
|
|
|
|
|
|
|
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;
|
|
|
|
}
|
2016-01-25 18:05:55 -08:00
|
|
|
boolean end() {
|
|
|
|
return item == null && next == null;
|
|
|
|
}
|
2015-06-15 17:47:35 -07:00
|
|
|
}
|
|
|
|
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);
|
|
|
|
}
|
2015-09-07 11:44:36 -06:00
|
|
|
}
|
|
|
|
/* Output:
|
2015-06-15 17:47:35 -07:00
|
|
|
stun!
|
|
|
|
on
|
|
|
|
Phasers
|
2015-09-07 11:44:36 -06:00
|
|
|
*/
|