解题思路:一个入栈,一个出栈,共同组成队列
class MyQueue {
public:
MyQueue() {
}
void push(int x) {
in_stack.push(x);
}
int pop() {
auto tmp = peek();
out_stack.pop();
return tmp;
}
int peek() {
if ( !out_stack.empty() ) {
return out_stack.top();
}
while( !in_stack.empty() ) {
out_stack.push(in_stack.top());
in_stack.pop();
}
return out_stack.top();
}
bool empty() {
return in_stack.empty() && out_stack.empty();
}
private:
stack<int> in_stack; // 用于入队
stack<int> out_stack; // 用于出队
};
解题思路:
- 需要 back queue
- 一个队列也可以,队列头部的元素重新入队,再弹出头部元素
class MyStack {
public:
MyStack() {
}
void push(int x) {
normal_queue.push(x);
}
int pop() {
int index = normal_queue.size() - 1;
while(index-- > 0) {
back_queue.push(normal_queue.front());
normal_queue.pop();
}
int ret = normal_queue.front();
normal_queue.pop();
normal_queue = back_queue;
while(!back_queue.empty()) {
back_queue.pop();
}
return ret;
}
int top() {
return normal_queue.back();
}
bool empty() {
return normal_queue.empty();
}
private:
queue<int> normal_queue;
queue<int> back_queue;
};