下面展示了一个用模板和泛型编写的堆栈类, 节点类使用内嵌类实现,并且用结尾哨兵(类似空对象的思想)来标记栈底.
package com.cnsuning.src;
import java.lang.reflect.*;
import java.util.*;
public class Main {
public static void main(String[] args) {
LinkedStack<Integer> lStack = new LinkedStack<Integer>();
lStack.push(11);
lStack.push(22);
lStack.push(33);
lStack.push(44);
lStack.push(55);
lStack.push(66);
Integer value = null;
while (null != (value = lStack.pop())) {
System.out.println(value);
}
}
}
class LinkedStack<T> {
private static class Node<U> {
private U value;
private Node<U> next;
Node(U value, Node<U> next) {
this.value = value;
this.next = next;
}
Node() {
this.value = null;
this.next = null;
}
public boolean end() {
return value == null && next == null;
}
public U getValue() {
return this.value;
}
public Node<U> getNext() {
return this.next;
}
}
private Node<T> top = new Node<T>();
public void push(T value) {
Node<T> newNode = new Node<T>(value, top);
top = newNode;
}
public T pop() {
if (this.top.end()) {
return null;
}
T value = this.top.getValue();
top = top.getNext();
return value;
}
}