剑指offer--用两个栈实现队列
import java.util.Stack; /* * 栈是先进后出,队列是先进先出。所以两个栈相互配合要实现先进先出的效果。用两个栈正好能把顺序反过来实现类似队列的操作。 * 1、如果stack1要往stack2中压入数据,那么必须一次性把stack1中的数据全部压入 * 2、如果stack2不为空,stack1绝对不能向stack2中压入数据 */ public class Main8 { Stack<Integer> stack1; Stack<Integer> stack2; public Main8() { stack1 = new Stack<Integer>(); stack2 = new Stack<Integer>(); } public void push(int node) { stack1.push(node); } public int pop() { if(stack1.empty()&&stack2.empty()){ throw new RuntimeException("Queue is Empty!"); } //出队时在栈2为空的前提下,保障一次性将栈1的内容压入栈2 if(stack2.empty()){ while(!stack1.empty()){ stack2.push(stack1.pop()); } } return stack2.pop(); } public int peek() { if(stack1.empty()&&stack2.empty()){ throw new RuntimeException("Queue is Empty!"); } //出队时在栈2为空的前提下,保障一次性将栈1的内容压入栈2 if(stack2.empty()){ while(!stack1.empty()){ stack2.push(stack1.pop()); } } return stack2.peek(); } }