前端面试真题,2周刷完100道。4. 用两个栈实现一个队列

89 阅读1分钟

题目

用两个栈实现一个队列

队列和栈的特点

队列

先进先出, 有add, delete,length 属性

后进先出, 有add, delete,length 属性

队列和栈都可以使用数组或者链表实现。

思路1 使用数组实现

  1. 创建两个栈 stack1,stack2,
  2. add 的时候 push 到 stack1
  3. 获取 length 返回stack1.length
  4. delete 要保证按照队列的特点,
    • 先将stack1 中的元素,按顺序搬到stack2
    • 从stack2 中出栈一个元素,并最终返回该元素
    • 将stack2 中元素 按顺序搬到stack1

代码实现

class Myqueue {
  private stack1: number[] = [];
  private stack2: number[] = []
  add (n:number) {
    this.stack1.push(n)
  }
  delete():number | null {
    while(this.stack1.length) {
      const item = this.stack1.pop()
      if (item != null) {
        this.stack2.push(item)
      }
    }
    let res = this.stack2.pop()
    while(this.stack2.length) {
      const item = this.stack2.pop()
      if (item != null) {
        this.stack1.push(item)
      }
    }
    return res || null

  }
  get length(): number {
    return this.stack1.length
  }
}

2周刷完100道前端优质面试真题 mu课 视频及资料领取请关注:奋斗的刚子

也欢迎使用我的小程序 效果图

xcxm.jpg