剑指Offer09用两个栈实现队列
Posted hesorchen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指Offer09用两个栈实现队列相关的知识,希望对你有一定的参考价值。
题目
用两个栈实现队列。
解题思路
感觉有 O ( n ) O(n) O(n)的解法,但是想了好一会还是没想到,看了数据范围1e4,交了一发 O ( n 2 ) O(n^2) O(n2)的过了。
原思路就是简单的来回倒。
题解思路
维护两个栈,一个维护插入,一个维护删除。需要删除的时候可以把插入栈里的元素全部倒进删除栈里,注意只有删除栈为空了,才会倒,否则会破坏元素的顺序。很巧妙。
代码
class CQueue
stack<int> st1, st2;
public:
CQueue()
while (st1.size())
st1.pop();
while (st2.size())
st2.pop();
void appendTail(int value)
st1.push(value);
int deleteHead()
if (!st2.size()) //为空才会倒,才能保证顺序正确
while (st1.size())
st2.push(st1.top());
st1.pop();
if (!st2.size())
return -1;
int res = st2.top();
st2.pop();
return res;
;
以上是关于剑指Offer09用两个栈实现队列的主要内容,如果未能解决你的问题,请参考以下文章