JZ9 用两个栈实现队列
描述
用两个栈来实现一个队列,使用n个元素来完成 n 次在队列尾部插入整数(push)和n次在队列头部删除整数(pop)的功能。 队列中的元素为int类型。保证操作合法,即保证pop操作时队列内已有元素。
分析
使用两个栈来实现队列,首先我们要记住队列和栈的性质
1.队列
队列的性质是先进先出用图表示就是
2.栈
栈的性质是后进先出用图表示就是
3.解题
题目中说的是用两个栈来实现队列的pop和push,首先就能想到,用一个栈来存储push进来的所有元素,而在pop中首先因为栈是最先进来的元素才会pop出去,所以开始把保存元素的栈进行循环pop,pop出的元素保存在另外一共空栈上,直到第一个栈剩下栈底元素,这个就是我们需要pop出的结果,使用变量记录结果之后,清空第一个栈,使用第二个栈pop到空,元素依次push如第一个栈,保存数据,
push
pop
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() {
int result;
while (stack1.size() != 1) {
stack2.push(stack1.pop());
}
result = stack1.pop();
while (stack2.size() != 0) {
stack1.push(stack2.pop());
}
return result;
}
}