两个栈实现队列
两个栈严格区分开来使用,一个专门用来做插入(插入栈),一个专门用来做弹出(弹出栈)。这样在做插入的时候什么都不需要做,直接调用插入栈的push方法就可以了。但是在弹出的时候就要麻烦一点,先判断在弹出栈中是否包含数据,如果包含,直接从顶部弹出,如果不包含,把插入栈中的元素挨个导入到弹出栈中。然后再从栈顶将第一个元素弹出。
class Solution
{
public:
void push(int node) {
stack1.push(node);
}
int pop() {
if(!stack2.empty())
{
int ret=stack2.top();
stack2.pop();
return ret;
}
else
{
if(stack1.empty())
{
return -1;
}
while(!stack1.empty())
{
stack2.push(stack1.top());
stack1.pop();
}
int ret=stack2.top();
stack2.pop();
return ret;
}
}
private:
stack<int> stack1;
stack<int> stack2;
};