9剑指OFFER之将两个栈变为一个队列

参考资料:

自己思考的。(自己思考很重要)

思路:

//我的思路是push的话,把东西压入栈1中,
//pop的话,把stack1压入stack2,再pop,然后在压回stack1!!!
//看看我的思路行吗,可以的。

关键词:其中一个栈作为辅助栈!!!
自己的代码:
class Solution
{
public:
    void push(int node) {
        stack1.push(node);
    }

    int pop() {
        
        if (!stack1.empty())
        {
            while (!stack1.empty())
            {
                int nTmp = stack1.top();
                stack1.pop();
                stack2.push(nTmp);
            }
        
            int nTmp2 = stack2.top();
            stack2.pop();

            while (!stack2.empty())
            {
                int nTmp = stack2.top();
                stack2.pop();
                stack1.push(nTmp);
            }


            return nTmp2;
        }
        else
        {
            return -1;
        }
    }

private:
    stack stack1;
    stack stack2;
};
class Solution
{
public:
    void push(int node) {
        stack1.push(node);
    }

    int pop() {
        //返回什么呢?返回pop的值
        //步骤1:把栈1压入栈2中
         int result;
        if(!stack1.empty())
        {
            while(!stack1.empty())
            {
                stack2.push(stack1.top());
                stack1.pop();
            }
            //pop
            result = stack2.top();
            stack2.pop();
            //步骤2:然后把栈2压回栈1中
            while(!stack2.empty())
            {
                stack1.push(stack2.top());
                stack2.pop();
            }    
        }
        return result;
        
    }

private:
    stack stack1;
    stack stack2;
};
//我的思路是push的话,把东西压入栈1中,
//pop的话,把stack1压入stack2,再pop,然后在压回stack1
//看看我的思路行吗,可以的。
标准答案:
class Solution
{
public:
    void push(int node) {
        //直接将元素push进stack1
        stack1.push(node);
    }

    int pop() {
        int a;
        //如果stack2是空的话,把stack1中的所有元素放进去
        if(stack2.empty())
        {
            //
            while(!stack1.empty())
            {
                a = stack1.top();
                stack2.push(a);
                stack1.pop();    
            }   
            
            a = stack2.top();
            stack2.pop();
            return a;
        }
        
        
        
        //如果stack2不为空的话,直接取Stack2栈顶的元素
        a  = stack2.top();
        stack2.pop();
        return a;
            
    }

private:
    stack stack1;
    stack stack2;
};

你可能感兴趣的:(9剑指OFFER之将两个栈变为一个队列)