剑指Offer 用两个栈实现队列
2019-03-16 10:13
197 查看
版权声明:本文为博主原创文章,转载请注明出处 https://blog.csdn.net/qq_37752223/article/details/88592880
题目描述
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
之前自己的做法是这样的:
每次入队
- 如果stack1为空,说明前一次操作是出队,把stack2的数都弹出来压到stack1中,再把新的数压进stack1
- 如果stack1非空,对应前一次操作也是入队,直接把新数压入stack1
出队
- 如果stack2为空,说明前一次是入队,把stack1的数都压进stack2再弹
- stack2不为空,说明前一次操作是出队,直接弹出。
看了书发现入队操作还可以再优化,入队的时候并不需要考虑stack2,直接压入stack1就可以了。这样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) { if(stack1.empty()) { while(!stack2.empty()) { stack1.push(stack2.pop()); } } stack1.push(node); } public int pop() { if(stack2.empty()) { while(!stack1.empty()) { stack2.push(stack1.pop()); } } return stack2.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() { if(stack2.empty()) { while(!stack1.empty()) { stack2.push(stack1.pop()); } } return stack2.pop(); } }
妙啊
相关文章推荐
- 面试题-剑指offer-两个队列实现栈
- 剑指Offer_05_用两个栈实现队列
- 剑指Offer面试题7[用两个栈实现队列]
- 剑指Offer——用两个栈实现队列
- 【剑指offer】面试题07:用两个栈实现队列
- 牛客网-剑指offer-05-用两个栈实现队列
- 剑指Offer-【面试题07:两个栈实现队列】
- 剑指offer--面试题7: 用两个栈实现队列
- 剑指Offer-用两个栈实现队列
- 剑指Offer:两个栈实现队列
- 【剑指offer】面试题7:用两个栈实现队列
- 剑指Offer之用两个栈实现队列
- 剑指offer-算法题练习:part5 用两个栈实现队列
- 【剑指offer】用两个栈实现队列
- 剑指offer--两个栈实现一个队列
- 剑指offer之用两个栈实现队列(java实现)
- [剑指offer]面试题7:用两个栈实现队列
- 剑指offer 面试题7 用两个栈实现队列
- [剑指offer][面试题07]用两个栈实现队列
- 《苦练算法》-剑指Offer- 五、 用两个栈实现队列 -python编写