题目描述
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
思路:
两个栈称为栈1和栈2;
先将数据入栈1,在从栈1 转移到栈2从而形成队列的入队和出队。
当入“队”时,需要注意检测栈2是否有数据;
若栈2有数据则需要返回到栈1再将数据入栈(若不返回栈1则不能形成队列);
当出“队”时,先判断栈1是否存在数据,若栈1有数据,则将栈1的数据移动到栈2并出栈;
若栈1没数据,则有两种可能:
1、“队列”内无内容;
2、连续出队时,栈2的内容还没有转移到栈1内。
所以除了检测栈1是否存在数据,还需要检测栈2是否存在数据。
代码如下:
import java.util.Stack;
public class Solution {
Stack<Integer> stack1 = new Stack<Integer>();
Stack<Integer> stack2 = new Stack<Integer>();
public void push(int node) {
//当stack2有数据时,必须先移到stack1在入栈
while(!stack2.isEmpty()){
stack1.push(stack2.pop());
}
stack1.push(node);
}
public int pop() {
//队空,后面的条件需要考虑连续出栈
if(stack1.isEmpty() && stack2.isEmpty()){
return 0;
}
while(!stack1.isEmpty()){
stack2.push(stack1.pop());
}
return stack2.pop();
}
}