【剑指offer】用两个栈实现队列 -- Java实现
题目描述
思路分析
栈的特性:先进后出 ;队列的特性:先进先出
现在有两个栈,分别是stack1和stack2,模拟队列先进先出的特性
当我们往模拟队列中插入元素1,2,3时,此时栈情况:
stack1:{1,2,3}
stack2:{}
当我们要弹出第一个元素时,由于队列先进先出的特性,我们需要弹出的第一个元素是3,
所以我们需要先把stack1中所有元素逐个弹出压入stack2,此时栈情况为:
stack1:{}
stack2:{3,2,1}
再从stack2中弹出第一个元素,此时栈情况为:
stack1:{}
stack2:{3,2}
如果我们再往模拟队列中插入元素4时,此时栈情况为:
stack1:{4}
stack2:{3,2}
根据队列先进先出的特性,如果我们再次弹出元素,只需将stack2的元素依次弹出即可
stack1:{4}
stack2:{}
然后再将stack1的元素弹出压入stack2
stack1:{}
stack2:{4}
最后从stack2中弹出
stack1:{}
stack2:{}
实现了模拟队列的push和pop操作
最后总结为:如果要往模拟队列插入元素,只要将元素压入stack1
如果要从模拟队列弹出元素,当stack2不为空,弹出stack2栈顶元素;当stack2为空,将stack1元素依次弹出压入stack2,再弹出stack2栈顶元素
核心代码
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());
}
}
return stack2.pop();
}
}
浙公网安备 33010602011771号