剑指offer 09. 用两个栈实现队列
题目:
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
解答:
- 栈特点:先进后出,在栈顶进出元素
- 队列特点:先进先出,在队头、队尾分别进出元素
- 2个栈实现队列的要点: 一个栈作为队列入口,负责插入新元素; 另一个栈作为队列出口,负责移除老元素
- 具体实现: 1、先让元素按序进入栈A 2、栈A中的元素按序出栈,压入栈B
var CQueue = function () {
this.stackA = [];
this.stackB = [];
};
/**
* @param {number} value
* @return {void}
*/
CQueue.prototype.appendTail = function (value) {
this.stackA.push(value);
};
/**
* @return {number}
*/
CQueue.prototype.deleteHead = function () {
if (!this.stackB.length) {
if (!this.stackA.length) return -1;
else
while (this.stackA.length)
this.stackB.push(this.stackA.pop()); // 核心
}
return this.stackB.pop();
};