题解 | #用两个栈实现队列#
用两个栈实现队列
http://www.nowcoder.com/practice/54275ddae22f475981afa2244dd448c6
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() {
/**
* stack1 push5次 stack1里的顺序应该是 5 4 3 2 1
* 此时不论你stack1后续是否调用pop 但题目主题是要用2个栈实现队列
* 那么我就应该判断 只要stack1不为null 就应该把stack1里面的元素
* 5 4 3 2 1 push到 stack2中 变为 1 2 3 4 5 且前提是stack2非null
* 因为如果是stack1 1 2 3 4 5 在第3次push后 调用了一次pop
* 那么 stack1中 3 2 1 应该落入stack2中为 1 2 3 且只弹出了 1一个元素
* 此时stack1继续push 4 5 此时stack2中 仍有2 3在栈中 要想实现
* 队列的效果,此时stack2中在存在元素的情况下,不应再push元素,如果push
* 了 stack2就变成了 4 5 2 3了 达不到题目的效果了
* 所以此时在stack2存在元素的情况下,应该仍然弹出剩下的2 3元素才可以
*/
if (stack2.isEmpty()) {
while (!stack1.isEmpty()) {
stack2.push(stack1.pop());
}
}
return stack2.pop();
}
}刷刷题 文章被收录于专栏
刷刷题 活跃活跃脑细胞
查看19道真题和解析