1. 题目
用两个栈来实现一个队列,完成队列的Push
和Pop
操作。 队列中的元素为int
类型。
2. 思路
2.1 整体思路
- 队列的特点是:先进先出
- 栈的特点是:先进后出
- 所以要用两个栈完成先进的元素先出,其实只要把第一个栈的出栈作为第二个栈的入栈就可以了。这样可以保证第二个栈在出栈的时候符合题目要求。
- 也就是将数据在
stack1
的出栈操作对接stack2
的入栈操作
2.2 实例化思路
数据 1,2,3,4,5,6
入栈 stack1
之后再出栈就变成了 6,5,4,3,2,1
,然后把这个结果入栈 stack2
,然后再出栈,就变成了 1,2,3,4,5,6
, 也就是完成了跟队列相同的工作
但是同样要注意:
- 在数据入栈
stack2
的时候要保证stack2
是空栈,否则还是会出错 - 保证当
stack1
出栈全部结束之后程序停止运行,否则会报“java.util.EmptyStackException”
也就是空栈依然还在出栈的错误。
3. 代码
import java.util.Stack;
public class Solution {
Stack<Integer> stack1 = new Stack<Integer>();
Stack<Integer> stack2 = new Stack<Integer>();
public void push(int node) {
stack1.push(node); //整体的入栈就还是 stack1 的入栈
}
public int pop() { // 整体的出栈分了两部分,stack1 的出栈和 stack2 的入栈,返回的是 stack2 的出栈
if(stack2.size()==0){
while(stack1.size()>0){
stack2.push(stack1.pop());
}
}
return stack2.pop();
}
}