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

Posted by CodingWithAlice on September 25, 2023

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

题目:

用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )

解答:

  • 栈特点:先进后出,在栈顶进出元素
  • 队列特点:先进先出,在队头、队尾分别进出元素
  • 2个栈实现队列的要点: 一个栈作为队列入口,负责插入新元素; 另一个栈作为队列出口,负责移除老元素
  • 具体实现: 1、先让元素按序进入栈A 2、栈A中的元素按序出栈,压入栈B
var CQueue = function () {
    this.stackA = [];
    this.stackB = [];
};

/** 
* @param {number} value
* @return {void}
*/
CQueue.prototype.appendTail = function (value) {
    this.stackA.push(value);
};

/**
* @return {number}
*/
CQueue.prototype.deleteHead = function () {
    if (!this.stackB.length) {
        if (!this.stackA.length) return -1;
        else
            while (this.stackA.length)
                this.stackB.push(this.stackA.pop()); // 核心

    }
    return this.stackB.pop();
};