一、题目如下
二、官方题解C++
class CQueue {
public:
stack<int> A, B;
CQueue() {}
void appendTail(int value) {
A.push(value);
}
int deleteHead() {
if(!B.empty()) {
int tmp = B.top();
B.pop();
return tmp;
}
if(A.empty()) return -1;
while(!A.empty()) {
int tmp = A.top();
A.pop();
B.push(tmp);
}
int tmp = B.top();
B.pop();
return tmp;
}
};
我按照题解的方法写的答案提交后的结果👆
三、问题刨析
1.题目难点
- 第一个难点在于题目的理解,乍一看会不知道题目在讲什么
- 仔细研究源码后方才知道题目的要求原来很简单
2.题目刨析
- 要求设计一个函数,每次弹出的是栈底的元素
- 栈的结构不变
假设有这样一堆书本
他们叠在一块,先还到图书馆的书先被借出。如何做到?
我们需要借助一个新的栈空间,
我们将书本依次放进这个推车,最上面的就是我们需要的那本书(先还的书)
3.整体逻辑
- 借助一个新的推车
- 把书放进新的推车
- 每次判断新的推车是否有书
- 如果有书就拿走新的推车最上面的书
- 如果新的推车没有书,看原来的推车有没有书
- 如果原来的推车没有书,返回-1表示没有书了
- 如果原来的推车有书,把书放入新的推车
- 返回第三个步骤
还书比较容易实现,新换回来的书放到(A)原来的推车顶部即可。