抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。


思路

  • 用一个队列,将队头元素弹出并重新加入队尾,并用 count 计数,当队头元素为最后一个元素时,弹出。

学习点

代码

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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
class MyStack {
private:
queue<int> inQ;

public:
MyStack() {
}

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

int pop() {
auto inQ_size = inQ.size();
// 返回最后一个元素
int ele_cnt = 0;
while (ele_cnt != inQ_size - 1)
{
inQ.push(inQ.front());
inQ.pop();

ele_cnt += 1;
}
// 此时队头元素为要 pop 的元素
auto res = inQ.front();
inQ.pop();

return res;
}

int top() {
auto inQ_size = inQ.size();
// 返回最后一个元素
int ele_cnt = 0;
while (ele_cnt != inQ_size - 1)
{
inQ.push(inQ.front());
inQ.pop();

ele_cnt += 1;
}
// 此时队头元素为要 pop 的元素
auto res = inQ.front();

inQ.push(inQ.front());
inQ.pop();

return res;
}

bool empty() {
return inQ.empty();
}
};

/**
* Your MyStack object will be instantiated and called as such:
* MyStack* obj = new MyStack();
* obj->push(x);
* int param_2 = obj->pop();
* int param_3 = obj->top();
* bool param_4 = obj->empty();
*/