JZ9-题解 | #用两个栈实现队列#

用两个栈实现队列

http://www.nowcoder.com/practice/54275ddae22f475981afa2244dd448c6

题目描述


用两个栈来实现一个队列,使用n个元素来完成 n 次在队列尾部插入整数(push)和n次在队列头部删除整数(pop)的功能。 队列中的元素为int类型。保证操作合法,即保证pop操作时队列内已有元素.


题解:栈1用来存放元素,栈2用来出栈。

算法思路:

  1. 栈1只用于存放入队列的元素,其顺序同队列相反
  2. 栈2为空时候,将栈1所有元素都出栈存放入栈2中,此时,栈2顺序同队列相同。
  3. 出栈时候,先判断栈2是否为空,若不为空,则将余下的元素出栈,顺序同队列。注意:此时不能将栈1元素入栈2中,会破坏顺序;若为空,将栈1所有元素入栈2中,然后再进行出栈队列元素。

代码:

class Solution
{
public:
    void push(int node) {
//         stack1.push(node);
        stack1.push(node);//入栈
    }
    int pop() {
        //当stack2为空的时候,把所有stack1中元素入栈,其顺序恰好同队列
        if(stack2.empty()){
            while(!stack1.empty()){
                stack2.push(stack1.top());//栈1元素入栈2中
                stack1.pop();//栈1元素出栈
            }
        }
        //如果不为空,就不在往栈2中存放元素,只有在栈2元素出栈完毕之和,在存放
        //不为空时,栈2元素出栈顺序是同队列一样的
        int result = stack2.top();
        stack2.pop();
        return result;
    }
private:
    stack<int> stack1;
    stack<int> stack2;
};



全部评论

相关推荐

榕城小榕树:1200单休,我去干点啥别的不好
点赞 评论 收藏
分享
机械打工仔:我来告诉你原因,是因为sobb有在线简历,有些HR为了快会直接先看在线简历,初步感觉不合适就不会找你要详细的了
投了多少份简历才上岸
点赞 评论 收藏
分享
屌丝逆袭咸鱼计划:心态摆好,man,晚点找早点找到最后都是为了提升自己好进正职,努力提升自己才是最关键的😤难道说现在找不到找的太晚了就炸了可以鸡鸡了吗😤早实习晚实习不都是为了以后多积累,大四学长有的秋招进的也不妨碍有的春招进,人生就这样
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务