Loading

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

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

  

  示例 1:

  输入:
  ["CQueue","appendTail","deleteHead","deleteHead"]
  [[],[3],[],[]]
  输出:[null,null,3,-1]

class CQueue {
    stack<int>ss1;
    stack<int>ss2;
public:
    CQueue() {

    }
    
    void appendTail(int value) {
        ss1.push(value);// ss1 用于存储后半段数据
        if(!ss2.size()){
            while(ss1.size()){
                ss2.push(ss1.top());
                ss1.pop();
            }
        }


    }
    
    int deleteHead() {
        if(!ss2.size()){
            while(ss1.size()){
                ss2.push(ss1.top());
                ss1.pop();
            }
        }
        if(ss2.size()==0) return -1;
        int tmp=ss2.top();
        ss2.pop();
        return tmp;

    }
};

/**
 * 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-23 09:27  aalanwyr  阅读(28)  评论(0编辑  收藏  举报