码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode 剑指offer 9 用两个栈实现队列

时间:2021-01-01 11:44:06      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:strong   empty   http   inf   解法   com   声明   and   head   

问题描述:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTaildeleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )

解题思路:

  • 栈无法实现队列功能: 栈底元素(对应队首元素)无法直接删除,需要将上方所有元素出栈。
  • 双栈可实现列表倒序: 设有含三个元素的栈 A = [1,2,3] 和空栈 B = []。若循环执行 A 元素出栈并添加入栈 B ,直到栈 A 为空,则 A=[] , B = [3,2,1] ,即 栈 B 元素实现栈 A 元素倒序 。
  • 利用栈 B删除队首元素: 倒序后B ,执行出栈则相当于删除了A的栈底元素,即对应队首元素。

技术图片

解法:

class CQueue {
public:
    CQueue() {
    }
    void appendTail(int value) {
        s1.push(value);
    }
    int deleteHead() {
        if(s1.empty()) return -1;
        while (!s1.empty()){
            int tmp = s1.top();
            s1.pop();
            s2.push(tmp);
        }
        int res = s2.top();
        s2.pop();
        while (!s2.empty()){
            int tmp = s2.top();
            s2.pop();
            s1.push(tmp);
        }
        return res;
    }
    stack<int>s1;
    stack<int>s2;
};
/**
 * Your CQueue object will be instantiated and called as such:
 * CQueue* obj = new CQueue();
 * obj->appendTail(value);
 * int param_2 = obj->deleteHead();
 */

leetcode 剑指offer 9 用两个栈实现队列

标签:strong   empty   http   inf   解法   com   声明   and   head   

原文地址:https://www.cnblogs.com/zeroluo/p/14197530.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!