节点类
package stack.demo;
public class Node {
private Object data;
private Node nextNode;
private Node prevNode;
public Node(Object data) {
super();
this.data = data;
}
public Node getNextNode() {
return nextNode;
}
public void setNextNode(Node nextNode) {
this.nextNode = nextNode;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public Node getPrevNode() {
return prevNode;
}
public void setPrevNode(Node prevNode) {
this.prevNode = prevNode;
}
}
栈类
package stack.demo;
public class LinkedStack {
Node first;
Node last;
int maxLength = 5;
int size = 0;
public void add(String value) {
if (size == maxLength) {
System.out.println("已经是满栈了");
return;
}
Node newNode = new Node(value);
Node temp = last;
newNode.setPrevNode(temp);
last = newNode;
if (temp == null) {
first = newNode;
} else {
temp.setNextNode(newNode);
}
size++;
}
// 栈是先进后出,必须要栈低以上的先出完,才能拿到栈的底的数据
public String removeLast() {
if (size == 0) {
System.out.println("已经是空栈了");
return null;
}
Node temp = last;
last = last.getPrevNode();
size--;
return (String) temp.getData();
}
}
执行类
package stack.demo;
public class Main {
public static void main(String[] args) {
LinkedStack ls = new LinkedStack();
ls.add("a");
System.out.println("进a");
ls.add("b");
System.out.println("进b");
ls.add("c");
System.out.println("进c");
ls.add("d");
System.out.println("进d");
ls.add("e");
System.out.println("进e");
ls.add("f");
System.out.println("进f");
System.out.println("出栈: " + ls.removeLast());
System.out.println("出栈: " + ls.removeLast());
System.out.println("出栈: " + ls.removeLast());
System.out.println("出栈: " + ls.removeLast());
System.out.println("出栈: " + ls.removeLast());
System.out.println("出栈: " + ls.removeLast());
}
}
执行结果
进a
进b
进c
进d
进e
已经是满栈了
进f
出栈: e
出栈: d
出栈: c
出栈: b
出栈: a
已经是空栈了
出栈: null