剑指offer面试题之用两个栈实现队列
2016-03-20 16:37
239 查看
1,问题:
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
2,想法:
(1),初始想法:
push时,就用stack1进栈;
Pop时,先把stack1的值出栈,同时入栈stack2,然后再去stack2栈顶元素,再出栈。再把stack2中元素出栈,同时入栈stack1,即回到Pop前状态!
(2),在(1)的基础上有个改进点,那就是当stack2不为空时,我们直接就可以stack2.pop();因为stack2中的顺序就是队列中的顺序。
3,在牛客网上编码为:
题目没那么简单,往往有可以利用的条件,需要仔细分析!
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
2,想法:
(1),初始想法:
push时,就用stack1进栈;
Pop时,先把stack1的值出栈,同时入栈stack2,然后再去stack2栈顶元素,再出栈。再把stack2中元素出栈,同时入栈stack1,即回到Pop前状态!
(2),在(1)的基础上有个改进点,那就是当stack2不为空时,我们直接就可以stack2.pop();因为stack2中的顺序就是队列中的顺序。
3,在牛客网上编码为:
public: void push(int node) { stack1.push(node); } int pop() { /*while (!stack1.empty()) { stack2.push(stack1.top()); stack1.pop(); } int temp = stack2.top(); stack2.pop(); while (!stack2.empty()) { stack1.push(stack2.top()); stack2.pop(); } return temp; //我这种方法没有利用好栈的性质,当栈2 //不为空时,出栈时应该直接stack2.pop(); */ int temp; if (stack2.empty())//若栈2为空,就需要导过来 { while (!stack1.empty()) { stack2.push(stack1.top()); stack1.pop(); } temp = stack2.top(); stack2.pop(); return temp; } else { temp = stack2.top(); stack2.pop(); return temp; } } private: stack<int> stack1; stack<int> stack2; };反省:
题目没那么简单,往往有可以利用的条件,需要仔细分析!
相关文章推荐
- 春招面试准备
- 剑指offer面试题之从头到尾打印链表
- 阿里电话面试之所做所得所感(2015年7月)
- 深圳c#面试第三天 题目以及答案
- PHP面试 第一弹
- 信管师培训之第三节课作业(项目管理一般知识+立项管理)
- hadoop程序员软件包
- Java程序员软件包
- 不懂职场杠杆,35岁以后你就会以这样的方式被“干”掉
- Android面试题摘录(1)
- 【运维故事】职场如何领先一步?
- 程序员的自我修养 - 操作系统
- 面试问题
- Java面试题全集(上)
- 程序员学习英语
- 求职之路
- day01 html面试题--表单常用的提交方式有哪些?区别是
- 年度跳槽大戏:为什么要挑在“金三银四”折腾
- 中小学教师资格证,详情请加我QQ:120-051-422
- 程序员的自我修养——编译和链接