![](https://img2020.cnblogs.com/blog/1435569/202010/1435569-20201021100901422-589641218.png)
思路
![](https://img2020.cnblogs.com/blog/1435569/202010/1435569-20201021101224735-2018518875.png)
![](https://img2020.cnblogs.com/blog/1435569/202010/1435569-20201021101644550-1547006886.gif)
代码实现
1 class CQueue {
2 private:
3 stack<int> s1; //用于插入
4 stack<int> s2; //用于删除
5 public:
6 CQueue() {
7
8 }
9
10 void appendTail(int value) {
11 s1.push(value);
12 }
13
14 int deleteHead() {
15 if(s2.empty()) {
16 if(s1.empty()) {
17 return -1;
18 } else {
19 while(!s1.empty()) {
20 s2.push(s1.top());
21 s1.pop();
22 }
23
24 int x = s2.top();
25 s2.pop();
26 return x;
27 }
28 } else {
29 int x = s2.top();
30 s2.pop();
31 return x;
32 }
33 }
34 };
35
36 /**
37 * Your CQueue object will be instantiated and called as such:
38 * CQueue* obj = new CQueue();
39 * obj->appendTail(value);
40 * int param_2 = obj->deleteHead();
41 */
复杂度分析
![](https://img2020.cnblogs.com/blog/1435569/202010/1435569-20201021101057831-1244272825.png)
![](https://img2020.cnblogs.com/blog/1435569/202010/1435569-20201021100841700-1262613699.png)
参考
用两个栈实现队列-LeetCode官方
面试题09. 用两个栈实现队列(清晰图解)