public class Stack {
@Test
public void test() {
// LinkedStack linkedStack = new LinkedStack();
// linkedStack.push("a");
// linkedStack.push("b");
// linkedStack.push("c");
// linkedStack.show();
// System.out.println("==============" + linkedStack.pop());
// linkedStack.show();
Browser browser = new Browser();
browser.open("a");
browser.open("b");
browser.open("c");
browser.forward();
browser.backward();
browser.backward();
browser.forward();
browser.open("d");
}
class Node {
String value;
Node next;
Node(String value) {
this.value = value;
}
}
class LinkedStack {
Node head;
public void push(String value) {
Node temp = new Node(value);
if (head == null) {
head = temp;
return;
}
Node current = head;
temp.next = current;
head = temp;
}
public String pop() {
if (head == null) {
return null;
}
String value = head.value;
head = head.next;
return value;
}
public void clear() {
head = null;
}
public void show() {
Node current = head;
while (current != null) {
System.out.println("===============[" + current.value + "]");
current = current.next;
}
}
}
class Browser {
private LinkedStack stack1 = new LinkedStack();
private LinkedStack stack2 = new LinkedStack();
public void forward() {
String value = stack2.pop();
if (value == null) return;
stack1.push(value);
System.out.println("forward1============================");
stack1.show();
System.out.println("forward2============================");
stack2.show();
}
public void backward() {
String value = stack1.pop();
if (value == null) return;
stack2.push(value);
System.out.println("backward1=============================");
stack1.show();
System.out.println("backward2=============================");
stack2.show();
}
public void open(String target) {
stack1.push(target);
stack2.clear();
System.out.println("open1===================================");
stack1.show();
System.out.println("open2===================================");
stack2.show();
}
}
}