栈的话,还有优化空间。

来源:2-8 用两个栈实现一个队列

su1per

2022-03-13

在老师的基础上进行优化时间。
主要优化在于:不用每次再循环栈2,不再把数据回归到栈1

关键代码:

CQueue.prototype.deleteHead = function() {
    //如果栈2有元素,说明上一波的前面几个 元素还没出完,继续出
    if(this.stack2.length) return this.stack2.pop()
    if(!this.stack1.length) return -1
    // 栈2没了,这时候 开启 新一波 栈1推到栈2。
    while(this.stack1.length) {
       this.stack2.push(this.stack1.pop())
    }
    // 第二步返回栈2的pop
    let res = this.stack2.pop() || -1
    return res
};

图片描述

写回答

1回答

双越

2022-03-13

非常好!也感谢反馈和分享~

0
2
丫比比鸭
回复
qq_浅色调_3
不需要啊,要是这样做的话,stack1专注于push,stack2专注于pop,stack2空的时候才需要stack1把所有数据导进去,这样length就是stack1和stack2的length和。改一下length的get方法就好了
2023-03-09
共2条回复

2周刷完100道前端优质面试真题 双越最新力作

『前端面试真题100道』视频详解

1509 学习 · 642 问题

查看课程