232. 用栈实现队列
leetcode链接
代码随想录链接
一刷状态:通过
思路
定义两个栈,一个用于入队列,一个用于出队列,出队列的时候先检查out栈有无数据,如果没有数据,就将in的数据全部转移到in栈。
class MyQueue {
public:
stack<int> in;
stack<int> out;
MyQueue() {}
void push(int x) {
in.push(x);
}
int pop() {
int result = peek();
out.pop();
return result;
}
int peek() {
if(out.empty())
{
while(!in.empty())
{
out.push(in.top());
in.pop();
}
}
if(out.empty())
{
return NULL;
}
else
{
int result = out.top();
return result;
}
}
bool empty() {
return in.empty()&&out.empty();
}
};
225. 用队列实现栈
leetcode链接
代码随想录链接
一刷状态:通过
思路
交替输出,需要pop的时候,将队列的值放到另外一个队列,遍历到最底部就是栈的顶部。
class MyStack {
public:
queue<int> q1, q2;
MyStack() {
}
void push(int x) {
if(!q1.empty()) q1.push(x);
else if(!q2.empty()) q2.push(x);
else q1.push(x);
}
int pop() {
if(!q1.empty())
{
while(q1.size()>1)
{
q2.push(q1.front());
q1.pop();
}
int result = q1.front();
q1.pop();
return result;
}
else if(!q2.empty())
{
while(q2.size()>1)
{
q1.push(q2.front());
q2.pop();
}
int result = q2.front();
q2.pop();
return result;
}
else return NULL;
}
int top() {
if(!q1.empty())
{
return q1.back();
}
else if(!q2.empty())
{
return q2.back();
}
else return NULL;
}
bool empty() {
return q1.empty()&&q2.empty();
}
};