剑指Offer09用两个栈实现队列

Posted hesorchen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指Offer09用两个栈实现队列相关的知识,希望对你有一定的参考价值。

题目

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

用两个栈实现队列。

解题思路

感觉有 O ( n ) O(n) O(n)的解法,但是想了好一会还是没想到,看了数据范围1e4,交了一发 O ( n 2 ) O(n^2) O(n2)的过了。

原思路就是简单的来回倒。

题解思路

维护两个栈,一个维护插入,一个维护删除。需要删除的时候可以把插入栈里的元素全部倒进删除栈里,注意只有删除栈为空了,才会倒,否则会破坏元素的顺序。很巧妙。

代码

class CQueue

    stack<int> st1, st2;

public:
    CQueue()
    
        while (st1.size())
            st1.pop();
        while (st2.size())
            st2.pop();
    
    void appendTail(int value)
    
        st1.push(value);
    
    int deleteHead()
    
        if (!st2.size()) //为空才会倒,才能保证顺序正确
            while (st1.size())
            
                st2.push(st1.top());
                st1.pop();
            
        if (!st2.size())
            return -1;
        int res = st2.top();
        st2.pop();
        return res;
    
;

以上是关于剑指Offer09用两个栈实现队列的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer6-用两个栈实现队列

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

剑指 Offer 09. 用两个栈实现队列(简单)

剑指 Offer 09. 用两个栈实现队列(简单)

剑指 Offer 09. 用两个栈实现队列(简单)

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