使用两个stack,如进入队列为 1,2,3,4,5
那么其中的一个栈A内保存了 [栈底]5,4,3,2,1 ,这样出队列是顺序与入队列一直,假如此时6要入队列,如何使得栈A为 :[栈底]6,5,4,3,2,1,可以先将A [栈底]5,4,3,2,1 出栈入栈到另一个空的栈B中:[栈底]1,2,3,4,5,然后6入栈B,之后B再出栈入栈到另一个原来的栈A中,这样A[栈底]6,5,4,3,2,1
```
public class MyQueue {
private Stack<Integer> stack1 = null;
private Stack<Integer> stack2 = null;
public MyQueue() {
stack1 = new Stack<Integer>();
stack2 = new Stack<Integer>();
}
/*
* @param element: An integer
* @return: nothing
*/
public void push(int element) {
Stack<Integer> empty = stack1.isEmpty()?stack1:stack2;
Stack<Integer> notEmpty = empty == stack1? stack2 : stack1;
while(!notEmpty.isEmpty()) {//A栈出栈入B栈
Integer cur = notEmpty.pop();
empty.push(cur);
}
empty.push(element);
while(!empty.isEmpty()) {//B栈出栈入A栈
Integer cur = empty.pop();
notEmpty.push(cur);
}
}
/*
* @return: An integer
*/
public int pop() {
Stack<Integer> empty = stack1.isEmpty()?stack1:stack2;
Stack<Integer> notEmpty = empty == stack1? stack2 : stack1;
if(empty.isEmpty() && notEmpty.isEmpty()) {
return -1;
}
return notEmpty.pop();
}
/*
* @return: An integer
*/
public int top() {
Stack<Integer> empty = stack1.isEmpty()?stack1:stack2;
Stack<Integer> notEmpty = empty == stack1? stack2 : stack1;
if(empty.isEmpty() && notEmpty.isEmpty()) {
return -1;
}
return notEmpty.peek();
}
}
```