剑指Offer---面试题:使用两个栈实现队列
2016-11-29 15:28
246 查看
题目:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
思路:
首先,应该明确栈和队列的特性.
栈是先进后出表
队列是先进先出表
我们可以这样设想:
1.
2.
这样一来,原先第一个压入
写这道题目的时候,一开始就只想到上述情况,于是三分钟就搞定了.代码如下:
测试时候发现,并不是所有情况下,都可以完美的通过测试数据.具体来说
当
这是因为当两者次数不相等的时候,在
正确的姿势应该是:
在
正确代码:
思路:
首先,应该明确栈和队列的特性.
栈是先进后出表
队列是先进先出表
我们可以这样设想:
1.
push操作,我们将元素压入
stack1;
2.
pop操作,我们将
stack1里面的所有元素都出栈,然后依次压入
stack2;
这样一来,原先第一个压入
stack1里面的元素(假设是Integer类型的1),此时就在
stack2的栈顶,此时进行出栈操作就是将1出栈.这样一来,就满足了队列的性质,先进先出.
写这道题目的时候,一开始就只想到上述情况,于是三分钟就搞定了.代码如下:
import java.util.Stack; import java.util.Iterator; 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() { Iterator<Integer> iterator1 = stack1.iterator(); while (iterator1.hasNext()) { stack2.push(stack1.pop()); } return stack2.pop(); } }
测试时候发现,并不是所有情况下,都可以完美的通过测试数据.具体来说
当
push操作次数大于
pop操作次数时候就会出错.
这是因为当两者次数不相等的时候,在
stack2中,会存在上次一
pop操作所剩余下来的元素,该元素在下一次
pop操作时,应该首先出栈,但是上述代码没有对这种情况进行处理.
正确的姿势应该是:
在
push操作执行之后,应该检查
stack2中是否存在元素,如果存在,则将其全部压入
stack1中.然后,再压入方法实参.
正确代码:
import java.util.Stack; import java.util.Iterator; public class Solution { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Integer>(); public void push(int node) { Iterator<Integer> iterator2=stack2.iterator(); while(iterator2.hasNext()){ stack1.push(stack2.pop()); } stack1.push(node); } public int pop() { Iterator<Integer> iterator1 = stack1.iterator(); while (iterator1.hasNext()) { stack2.push(stack1.pop()); } return stack2.pop(); } }
相关文章推荐
- 剑指offer《面试题7:用两个栈实现队列》及用两个队列实现一个栈
- 《剑指Offer》面试题:用两个队列实现一个栈
- 剑指offer 面试题7 两个栈实现队列 java版答案
- 剑指offer面试题之用两个栈实现队列
- 《剑指offer》面试题7—用两个栈实现队列
- 面试题07_用两个栈实现队列——剑指offer系列
- 剑指offer面试题 用两个栈实现队列
- 剑指Offer系列-面试题7:用两个栈实现队列
- 【数据结构】(面试题)使用两个栈实现一个队列(详细介绍)
- 剑指offer面试题7:用两个栈实现队列
- 剑指offer面试题7:用两个栈实现队列
- 《剑指offer》面试题七 用两个栈实现队列
- 《剑指Offer》面试题-用两个栈实现队列
- (剑指Offer)面试题7:用两个栈实现队列
- 《剑指Offer》学习笔记--面试题7:用两个栈实现队列
- 《剑指Offer》面试题:用两个栈来实现一个队列
- 剑指offer面试题7——用两个栈实现队列
- 剑指offer_面试题7_用两个栈实现队列(让我熟悉了类模板的使用)
- 《剑指Offer》读书笔记---面试题7:用两个队列实现栈
- 剑指offer面试题7(java实现):用两个栈实现队列