题目描述
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
解题思路:因为栈和队列是一个相反的操作,所以两次相反就是相同的操作,举个例子:
栈s1 push4个元素:1 2 3 4;如果一次出栈是 :4 3 2 1
队列s2 push4个元素:1 2 3 4;如果依次出队列是:1 2 3 4
这个时候如果将栈s1pop的元素再入栈再出栈呢?
假设将栈s1pop的元素push到栈s2就是: 4 3 2 1
如果栈s2再pop就是:1 2 3 4
注意:如果出一个s1的变化和s2的变化
手工模拟步骤如下图所示:
代码如下:
class Solution{public: void push(int node) { s1.push(node); } int pop() { while(!s1.empty()){ s2.push(s1.top()); s1.pop(); }int temp=s2.top(); s2.pop(); while(!s2.empty()){ s1.push(s2.top()); s2.pop(); } return temp; }private: stack s1; stack s2;};