剑指offer——队列栈:用两个栈实现队列
只向一个栈内添加元素
添加的时候,只向一个栈内添加元素
弹出的时候,先把1中的元素全部倒入2中,这样保证栈2的顺序是和队列的顺序一样的
全部倒入后,检查栈2是否为空,从而判断原来的栈1是否没有元素
然后如果是现在栈2不为空,就说明添加的时候是:加加减加减,也就是原本的栈2内的元素出来的顺序都在当前要添加的元素之前,所以,先把栈2顶上的元素弹出
class Solution
{
public:void push(int node) {//添加的时候,只向一个栈内添加元素stack1.push(node);}int pop() {//如果栈2内的元素为空,可以先把栈1中的元素全部倒进2里if(stack2.empty()){while(!stack1.empty()){stack2.push(stack1.top());stack1.pop();}}//把栈1中的所有元素全部倒进2中后,如果2还是空的,就证明原来的栈1是空的,说明没有元素if(stack2.empty()){return -1;}//如果现在栈2不为空,则弹出的时候应该弹出的是栈顶元素int ans=stack2.top();stack2.pop();return ans;}private:stack<int> stack1;stack<int> stack2;
};