232. 用栈实现队列(简单)
思路
代码
class MyQueue {
public:
stack<int> inStack, outStack;
MyQueue() {
}
void push(int x) {
inStack.push(x);
}
int pop() {
if(outStack.empty()){
// inStack元素反转进栈
in2out();
}
int ans = outStack.top();
outStack.pop();
return ans;
}
int peek() {
if(outStack.empty()){
// inStack元素反转进栈
in2out();
}
int ans = outStack.top();
return ans;
}
void in2out(){
while(!inStack.empty()){
outStack.push(inStack.top());
inStack.pop();
}
}
bool empty() {
return inStack.empty() && outStack.empty();
}
};
/**
* Your MyQueue object will be instantiated and called as such:
* MyQueue* obj = new MyQueue();
* obj->push(x);
* int param_2 = obj->pop();
* int param_3 = obj->peek();
* bool param_4 = obj->empty();
*/
收获
- 我一开始自己写的时候,只使用了一个栈,然后在
pop()
和peek()
操作额外设置了一个临时栈,每一次都是将主栈的元素倒序输入到临时栈中,然后进行操作后再倒回主栈,显然比直接设置入口栈和出口栈麻烦得多。