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;
};