这题也很容易想到:一个栈出栈到另一个栈,然后另一个栈再出栈的顺序将是队列的顺序(原序列逆序的逆序是正序)
思路:两个栈,stack1,stack2; stack1负责存放元素,stack2负责暂时存放stack1的一次出栈,为了改变stack1里面元素的存放顺序
入栈操作:1.先将stack1依次出栈,依次存入stack2(这时stack2存放的是目标顺序的倒序)
2.将新节点node压入stack2(新节点位于栈顶,最先出栈)
3.将stack2的元素出栈,依次存入stack1(比较新的元素到了栈底,满足了后进后出,先进先出)stack1将是队列的顺序
弹出操作:stack1出栈的顺序就是队列的顺序了,直接stack1.pop()即可
比如要插入 1 2
class Solution { public: void push(int node) { while(!stack1.empty()){ stack2.push(stack1.top()); stack1.pop(); } stack2.push(node); while(!stack2.empty()){ stack1.push(stack2.top()); stack2.pop(); } } int pop() { int tmp = stack1.top(); stack1.pop(); return tmp; } private: stack<int> stack1; stack<int> stack2; };
.