目录
写在前面:
题目:剑指 Offer 09. 用两个栈实现队列 - 力扣(Leetcode)
题目的接口:
解题思路:
代码:
过啦!!!
写在最后:
写在前面:
每日一题真的是难,反正我是搞不定了,开摆。
另外,我最近要军训两周,也不知道能不能坚持每天更新了,
我现在是拿我休息的时间码文了........好累。
题目:剑指 Offer 09. 用两个栈实现队列 - 力扣(Leetcode)

题目的接口:
class CQueue {
public:
    CQueue() {
    }
    
    void appendTail(int value) {
    }
    
    int deleteHead() {
    }
};
/**
 * Your CQueue object will be instantiated and called as such:
 * CQueue* obj = new CQueue();
 * obj->appendTail(value);
 * int param_2 = obj->deleteHead();
 */解题思路:
建两个栈,
一个用来接受队列尾插的值,
一个用来充当队列的头删。
当队列需要进行头删的时候,
将原本接收队列尾插值的那个栈的元素放到另一个栈中,
这样就实现了队列头位于第二个栈的栈顶位置。
之后再进行出栈就是队列的头删了。
代码:
class CQueue {
public:
    //建两个栈
    stack<int> push_st;
    stack<int> del_st;
    CQueue() {
    }
    
    void appendTail(int value) {
        //直接存放值进栈里
        push_st.push(value);
    }
    
    int deleteHead() {
        //如果队列为空,返回-1
        if(push_st.empty() && del_st.empty())
        {
            return -1;
        }
        int tmp = 0;
        //如果用来头删的栈里有数据,就直接pop
        if(!del_st.empty())
        {
            tmp = del_st.top();
            del_st.pop();
            return tmp;
        }
        //将所以数据转移到用来删除的栈中
        //这个动作还能将队列第一个存放的数据移到栈顶
        while(!push_st.empty())
        {
            tmp = push_st.top();
            push_st.pop();
            del_st.push(tmp);
        }
        //然后pop再返回即可
        del_st.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();
 */过啦!!!

写在最后:
以上就是本篇文章的内容了,感谢你的阅读。
如果喜欢本文的话,欢迎点赞和评论,写下你的见解。
如果想和我一起学习编程,不妨点个关注,我们一起学习,一同成长。
之后我还会输出更多高质量内容,欢迎收看。



















