我的Bilibili频道:香芋派Taro
我的个人博客:taropie0224.github.io(阅读体验更佳)
我的公众号:香芋派的烘焙坊
我的音频技术交流群:1136403177
我的个人微信:JazzyTaroPie

https://leetcode-cn.com/problems/implement-queue-using-stacks/

题解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
class MyQueue
{
private:
stack<int> inStack, outStack;

void in2out()
{
//若输出栈为空则将输入栈的全部数据依次弹出并压入输出栈
while (!inStack.empty())
{
outStack.push(inStack.top());
inStack.pop();
}
//这样输出栈从栈顶往栈底的顺序就是队列从队首往队尾的顺序
}

public:
MyQueue() {}

void push(int x)
{
inStack.push(x);
}

int pop()
{
if (outStack.empty())
{
in2out();
}
int x = outStack.top();
outStack.pop();
return x;
}

int peek()
{
if (outStack.empty())
{
in2out();
}
return outStack.top();
}

bool empty()
{
return inStack.empty() && outStack.empty();
}
};

思路

把后进先出的栈改为先进先出的队列

新建一个输入栈和一个输出栈,每当执行pop和peek操作时,先检查此时的输入栈是否为空,如果有东西的话就把他们全部push到输出栈并在输入栈清空,然后返回此时输出栈顶部的数据即可