class Solution
{
public:
  /*观察题目,我们发现如果想要在push阶段同时处理stack1和stack2不太现实,
  因为我们无法知道下一个指令是push还是pop,因此想到将两个栈放在两个操作里进行*/
    void push(int node) {
        stack1.push(node);//对于push操作,直接将数据入栈即可
    }

    int pop() {
	  //对于pop操作,我们首先检查栈2(stack2)是否为空
        if(!stack2.empty())
        {
            stack2.pop();//如果不为空的话删除一个元素
            if(!stack2.empty())//如果仍然不为空,那栈2顶部就是我们想要的数
            {
                return stack2.top();//返回栈2顶部的数
            }
        }
        while(!stack1.empty())
		  //接着判断栈1,如果栈1不为空,则将栈1数据一个个压入栈2
		  //其实这个原理很简单,我们知道栈是先进后出,那么操作两次不就变成先进先出了吗?(^_−)☆
        {
            stack2.push(stack1.top());
            stack1.pop();
            
        }
        return stack2.top();//最后常规地返回栈2顶部的值
    }

private:
    stack<int> stack1;
    stack<int> stack2;
};