两个栈实现队列
剑指offer 09 用两个栈实现队列
#记录华科读研转码的岁月
解题分析:栈(一种先进后出的数据结构)、队列(一种先进先出的数据结构)
重点:维护两个栈,一个维护插入,一个维护删除。需要删除的时候可以把插入栈里的元素全部倒进删除栈里,注意只有删除栈为空了,才会倒,否则会破坏元素的顺序。很巧妙。
代码:
- class CQueue {
- public:
- stack<int> stack1; //插入栈
- stack<int> stack2; //删除栈
- CQueue() {}
- void appendTail(int value) {
- stack1.push(value);
- }
- int deleteHead() {
- if (stack1.empty()) return -1;
- while (!stack1.empty()){ // 1 -> 2
- int tmp = stack1.top();
- stack1.pop();
- stack2.push(tmp);
- }
- // delete head
- int res = stack2.top();
- stack2.pop();
- while (!stack2.empty()){ // 1 <- 2
- int temp = stack2.top();
- stack2.pop();
- stack1.push(temp);
- }
- return res;
- }
- };

浙公网安备 33010602011771号