本文转载自微信公众号《三分钟学前端》安姐。转载本文请联系三分钟学习前端公众号。实现一个有两个栈的队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队尾插入一个整数和在队头删除一个整数的功能。(如果队列中没有元素,则deleteHead操作返回-1)示例1:输入:["CQueue","appendTail","deleteHead","deleteHead"][[],[3],[],[]]输出:[null,null,3,-1]示例2:输入:["CQueue","deleteHead","appendTail","appendTail","deleteHead","deleteHead"][[],[],[5],[2],[],[]]output:[null,-1,null,null,5,2]prompt:1<=values<=10000会调用appendTail和deleteHeadupto10000次:栈后进先出,队列先进先出双栈可以实现顺序反转:假设有stack1=[1,2,3],stack2=[],如果stack1循环出,入栈元素压入stack2,则循环结束后,stack1=[],stack2=[3,2,1],即通过stack2实现stack1中元素的倒置。当需要删除队头元素时,只需要出栈stack2即可;当stack2为空时,要出队,需要将stack1的元素倒置到stack2中,stack2才能再次出队;如果stack1也为空,即队列中没有元素,返回-1代码实现:constCQueue=function(){this.stack1=[]this.stack2=[]};CQueue.prototype.appendTail=function(value){this.stack1.push(value)};CQueue.prototype.deleteHead=function(){if(this.stack2.length){returnthis.stack2.pop()}if(!this.stack1.length)return-1while(this.stack1.length){this.stack2.push(this.stack1.pop())}returnthis.stack2.pop()};复杂度分析:时间复杂度:appendTail的时间复杂度为O(1),deleteHead的时间复杂度为O(n)空间复杂度:O(n)
