题目如下:
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 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();
};
};
};
这篇博客讨论了一种使用两个栈来模拟队列数据结构的方法。在JavaScript中,通过栈A进行元素的入队操作(appendTail),而删除元素(deleteHead)时,先将栈A的所有元素转移到栈B,然后从栈B中删除元素。当栈B为空时,deleteHead操作返回-1。这种方法利用了栈的后进先出(LIFO)特性来模拟队列的先进先出(FIFO)特性。
9982

被折叠的 条评论
为什么被折叠?



