解法一:队列模拟
- 栈是后进先出,队列是先进先出,想要用栈实现队列,需要把一个栈中的元素挨个pop()出来,再push到另一个栈中。
- 上图中,我们将栈a中的数据全部pop()出来,再放入栈b中,经过这么一番操作后,栈b中的元素顺序就变成先进先出的顺序了,所以栈b中的顺序跟队列顺序一样了。
解法一、解法二其实都是利用了这种思路,只是不同的函数实现细节不同而已。
push函数实现如下:
分三步操作(维持栈b中的顺序是先进先出的顺序):
- 将栈b中的内容倒腾到栈a中
- 将新元素插入栈a中
- 再将栈a中的所有数据倒腾到栈b中
Java参考代码:
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);
}
//出栈操作
public int pop() {
if(stack2.size()<=0){
while(stack1.size()!=0){
stack2.push(stack1.pop());

京公网安备 11010502036488号