leetcode解题系列(五)
剑指offer09:用两个栈实现队列
题目描述:
复习一下:栈和队列都是线性表,不过是进出元素的顺序逻辑不相同;
对于栈,就像压子弹一样,先进后出;
队列是先进先出,元素从尾部进入,从头部取出元素;
比较容易想到的方法就是维护两个栈1,栈2;每当向队列存入一个数字的时候,先进栈1,若需要进行出队列操作时,就将栈1 的元素依次出栈,并按顺序入栈2,再对栈2进行常规的出栈操作,接下来又要将栈2出栈,进入栈1,进行入队列的操作。
举个例子:向空队列存入1,2,3,4这4个数字,他们在栈1中就是以4-3-2-1(顶-底)的顺序排列,这时如果执行出队列操作时,就要依次出栈1进栈2,这样4就成了栈2的底部,1成了栈2的顶部,再出栈成为输出元素,出队列成功;再将栈2中的元素返回到栈1,方便进行后续的入队列和出队列的操作。
代码如下:
class CQueue {
public:
stack<int> s1;
stack<int> s2;
CQueue() {
}
void appendTail(int value) {
s1.push(value);
}
int deleteHead() {
int res;
while(!s1.empty()){
s2.push(s1.top());
s1.pop();
}
if