链接:
剑指 Offer 09. 用两个栈实现队列
题意:
如题
解:
第一个栈逆序栈,存储插入顺序,另一个栈正序栈负责弹出数据
优化思想:只有当st2正序栈为空时才将st1逆序栈的转移过来(若st2不为空则会导致st1转移的数据叠在st2已有数据上方,我就不写了)
实际代码:
#include<bits/stdc++.h>
using namespace std;
class CQueue {
public:stack<int>st1,st2;//st1 逆序 st2 正序 CQueue() = default;//默认构造 void appendTail(int value){st2Tost1();st1.push(value); }//添加数值 int deleteHead(){st1Tost2();if(st2.empty()) return -1;else{int ret=st2.top();st2.pop();return ret;}}//移除数值
private:void st1Tost2(){while(!st1.empty()){st2.push(st1.top());st1.pop();}}void st2Tost1(){while(!st2.empty()){st1.push(st2.top());st2.pop();}}
};
int main()
{}
限制:
1 <= values <= 10000
- 最多会对
appendTail、deleteHead
进行10000
次调用