一、题目描述
题目来源:
剑指offer
题目详述:
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
二、题目详解
两个栈,栈1和栈2
入队: 如果栈2不为空,将栈2的内容全部pop到栈1里,然后栈1进行push操作;如果栈2为空,栈1直接push即可。
出队: 如果栈1不为空,将栈1内容全部pop到栈2里,然后栈2进行pop;如果栈1为空,栈2直接pop即可。
根据上面操作,即可满足队列的***FIFO*** 的push和pop操作。
三、Code及提交结果
1、C++实现
class Solution
{
public:
void push(int node) {
while(!stack2.empty()){
stack1.push(stack2.top());
stack2.pop();
}
stack1.push(node);
}
int pop() {
if(stack1.empty() && stack2.empty()){
return 0;
}
while(!stack1.empty()){
stack2.push(stack1.top());
stack1.pop();
}
int ans = stack2.top();
stack2.pop();
return ans;
}
private:
stack<int> stack1;
stack<int> stack2;
};
提交结果:
2、python实现
# -*- coding:utf-8 -*-
class Solution:
def __init__(self):
self.stack2 = []
self.stack1 = []
def push(self, node):
# write code here
if self.stack2:
self.stack2.reverse()
self.stack1.extend(self.stack2)
self.stack2 = []
self.stack1.append(node)
def pop(self):
# return xx
if self.stack1:
self.stack1.reverse()
self.stack2.extend(self.stack1)
self.stack1 = []
return self.stack2.pop()
提交结果: