用两个栈实现队列
用两个栈实现队列
- 参与人数:3047时间限制:1秒空间限制:32768K
- 通过比例:34.71%
- 最佳记录:0 ms|0K(来自 青哥)
题目描述
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
思路1(最普通的方法):
1、入队时,直接压入到stack1中;
2、出队时,先将stack1中的所有size-1个元素压入stack2中,然后将stack1的元素弹出;最后将stack2中的元素重新压入到s1中。
如下图所示:
1 class Solution 2 { 3 public: 4 void push(int node) { 5 stack1.push(node); 6 } 7 8 int pop() { 9 int t; 10 while (stack1.size() > 1){ 11 t = stack1.top(); 12 stack2.push(t); 13 stack1.pop(); 14 } 15 int rt = stack1.top(); 16 stack1.pop(); 17 while(stack2.size() > 0){ 18 t = stack2.top(); 19 stack1.push(t); 20 stack2.pop(); 21 } 22 return rt; 23 } 24 25 private: 26 stack<int> stack1; 27 stack<int> stack2; 28 };
思路2(优化):
1、入队时,直接压入到stack1中;
2、出队时,若stack2不为空,则直接弹出;若stack2为空,则将stack1的size-1个元素压入stack2中,最后弹出stack1中的栈顶元素。
1 class Solution 2 { 3 public: 4 void push(int node) { 5 stack1.push(node); 6 } 7 8 int pop() { 9 int rt; 10 if (!stack2.empty()){ 11 rt = stack2.top(); 12 stack2.pop(); 13 } 14 else{ 15 while (stack1.size() > 1){ 16 rt = stack1.top(); 17 stack2.push(rt); 18 stack1.pop(); 19 } 20 rt = stack1.top(); 21 stack1.pop(); 22 } 23 return rt; 24 } 25 private: 26 stack<int> stack1; 27 stack<int> stack2; 28 };