Skip to content

Latest commit

 

History

History
47 lines (37 loc) · 1.23 KB

09. 用两个栈实现队列.md

File metadata and controls

47 lines (37 loc) · 1.23 KB

题目链接:

剑指 Offer 09. 用两个栈实现队列

思路:

两个栈实现队列,所以只能用pushpop方法。

使用A来进行添加的操作,使用B来进行辅助

  • 添加元素时,将元素pushA
  • 删除元素时,先看B中是否有值,若有值,直接pop并返回
  • B中无值,将A中元素全部pop出,并pushB
  • Bpop出一个元素即可,若B中无元素,返回-1

这样才能满足最先pushA的元素,在B的最顶层,所以先从Bpop出,满足先入先出特性。

代码:

JavaScript

class CQueue {
    constructor() {
        this.stackA = [];
        this.stackB = [];
    }
    appendTail(value) {
        this.stackA.push(value);
    }
    deleteHead() {
        if (this.stackB.length) {
            return this.stackB.pop();
        } else {
            while (this.stackA.length) {
                this.stackB.push(this.stackA.pop());
            }
            if (!this.stackB.length) {
                return -1;
            } else {
                return this.stackB.pop();
            }
        }
    }
}