剑指 Offer 09. 用两个栈实现队列

题目:

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

class CQueue {
    stack<int> s1;
    stack<int> s2;
public:
    //构造函数中清空栈,虽然听说没必要
    CQueue() {
        while(!s1.empty())
        s1.pop();
        while(!s2.empty())
        s2.pop();
    }

    void appendTail(int value) {
           s1.push(value);//正常插入栈S1
    }
    
    int deleteHead() 
    {
        if(s2.empty())
        {
            while(!s1.empty())
            {
                s2.push(s1.top());//如果S1中有元素,就全部倒序插入S2,S1依次pop
                s1.pop();
            }
        }

        if(s2.empty())//如果已空return-1
            return -1;
        else
        {
            int deleteE = s2.top();//倒序插入,S2的top,即栈顶,为S1的首个元素
            s2.pop();//return该元素,并且出栈,下次调用时继续删除下个元素
            return deleteE;
        }
    }
};

/**
 * Your CQueue object will be instantiated and called as such:
 * CQueue* obj = new CQueue();
 * obj->appendTail(value);
 * int param_2 = obj->deleteHead();
 */

posted @ 2021-11-13 14:06  Akisumu  阅读(27)  评论(0)    收藏  举报