题目如下:
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
示例 1:
输入:
["CQueue","appendTail","deleteHead","deleteHead"]
[[],[3],[],[]]
输出:[null,null,3,-1]
示例 2:输入:
["CQueue","deleteHead","appendTail","appendTail","deleteHead","deleteHead"]
[[],[],[5],[2],[],[]]
输出:[null,-1,null,null,5,2]
第一次尝试:
思路:在第一个栈插入元素,在第二个栈删除元素。想要插入元素直接在栈A中push()即可,想要删除元素时,将A中的元素pop()再push()进B,就可以实现队列的效果。
注意:
- 用js来写时注意写this。
- 由于是栈数据结构,因此只能使用pop()和push(),不要使用别的方法。
- 删除元素时一次性将A中的元素全部压入B,这样之后删除时操作B即可,不需要重复压入元素(因此deleteHead函数中是否压入使用了while而不是一次性判断if)。
代码如下:
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){
return this.stackB.pop();
}else{
while(this.stackA.length){
this.stackB.push(this.stackA.pop());
};
if(!this.stackB.length){
return -1;
}else{
return this.stackB.pop();
};
};
};