用两个栈实现队列
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
难度:简单
/*** 栈是一种LIFO(Last-In-First-Out,后进先出)的数据结构* 也就是最新添加的项最早被移除* 而栈中项的插入(叫做推入)和移除(叫做弹出),只发生在一个位置——栈的顶部*//*** 队列数据结构的访问规则是FIFO(Fist-In-First-Out,先进先出)* 队列在列表的末端添加项,从列表的前端移除项*/var CQueue = function() {// 如题用两个栈// 定义出的栈this.outStack = [];// 定义入的栈this.inStack=[];};/*** @param {number} value* @return {void}*/CQueue.prototype.appendTail = function(value) {// 直接放到入的栈里面this.inStack.push(value);};/*** @return {number}* push()方法可以接收任意数量的参数,把它们逐个添加到数组的末尾,并返回修改后数组的长度** pop()方法删除数组的最后一个元素,把数组的长度减1,并且返回它被删除元素的值* 如果数组变为空,则该方法不改变数组,返回undefined值*/CQueue.prototype.deleteHead = function() {// es6的赋值特性let {outStack, inStack} = this;// 判断出的栈,是否有元素,没有元素就从入的栈取出一位,放到出的栈里面if (!outStack.length) {while(inStack.length) {// 1-先取出inStack,2-放到outStackoutStack.push(inStack.pop());}}// 这里使用短路写法,直接操作出的栈// 出的栈没有元素吐出来,那就只能返回-1return outStack.pop() || -1;};/*** Your CQueue object will be instantiated and called as such:* var obj = new CQueue()* obj.appendTail(value)* var param_2 = obj.deleteHead()*/
已完成 执行用时: 76 ms
输入
[“CQueue”,”appendTail”,”deleteHead”,”deleteHead”,”deleteHead”]
[[],[3],[],[],[]]
输出
[null,null,3,-1,-1]
预期结果
[null,null,3,-1,-1]
