JS剑指Offer 队列 栈

题目:用两个栈实现队列,实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入整数和在队列头部删除整数,若队列中没有元素deleteHead返回-1

分析:在队列的尾部插入元素很简单,直接用栈的push就可以实现,但是在头部删除一个元素就不简单了,虽然大家可能都会想到在JS中可以直接调用shift方法,但是题目要求我们用两个栈,便是让我们手写一下shift。我们分别用instack和outstack来保存入队元素和出队元素,删除头部元素的时候,把入栈元素全部push进outstack里,这时候outstack里就保存了原队列的倒序数组,这个时候用pop取出最后一个元素并返回,即实现了deleteHead。

 1            var CQueue = function(){
 2                this.inStack = []
 3                this.outStack = []
 4            }
 5            
 6            CQueue.prototype.appendTail = function(value){
 7                //加入元素 可以直接向instack里面push 
 8                this.inStack.push(value)
 9            }
10            
11            CQueue.prototype.deleteHead = function(){
12                 const {inStack,outStack} = this;
13                 //const inStack = this.inStack const outStack = this.outStack
14                 if(outStack.length){
15                     return outStack.pop()
16                 //两个栈 一个instack 一个outstack 我想要删除队列头部的元素 用一个栈是不行的
17                 //要把instack里的元素倒进outstack里,然后取第一个元素
18                 }else{
19                     while(inStack.length){
20                         outStack.push(inStack.pop());
21                     }
22                     return outStack.pop() || -1
23                 }
24             }

测试

1             var obj = new CQueue()
2             obj.appendTail(1)
3             obj.appendTail(2)
4             console.log(obj)//[1,2]
5             
6             obj.deleteHead()
7             console.log(obj)//[2]

 

版权声明:本文为dapang521原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/dapang521/p/12650138.html