
题目:用两个栈实现队列,实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入整数和在队列头部删除整数,若队列中没有元素deleteHead返回-1
分析:在队列的尾部插入元素很简单,直接用栈的push就可以实现,但是在头部删除一个元素就不简单了,虽然大家可能都会想到在JS中可以直接调用shift方法,但是题目要求我们用两个栈,便是让我们手写一下shift。我们分别用instack和outstack来保存入队元素和出队元素,删除头部元素的时候,把入栈元素全部push进outstack里,这时候outstack里就保存了原队列的倒序数组,这个时候用pop取出最后一个元素并返回,即实现了deleteHead。
var CQueue = function(){
this.inStack = []
this.outStack = []
} CQueue.prototype.appendTail = function(value){
//加入元素 可以直接向instack里面push
this.inStack.push(value)
} CQueue.prototype.deleteHead = function(){
const {inStack,outStack} = this;
//const inStack = this.inStack const outStack = this.outStack
if(outStack.length){
return outStack.pop()
//两个栈 一个instack 一个outstack 我想要删除队列头部的元素 用一个栈是不行的
//要把instack里的元素倒进outstack里,然后取第一个元素
}else{
while(inStack.length){
outStack.push(inStack.pop());
}
return outStack.pop() || -1
}
}
测试
var obj = new CQueue()
obj.appendTail(1)
obj.appendTail(2)
console.log(obj)//[1,2] obj.deleteHead()
console.log(obj)//[2]