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

用两个栈实现一个队列。队列的声明如下:

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

 

题目解析:

方法一:class类

  第一行输入数组是相关操作,第二行输入数组代表相应操作的参数

    CQueue:创建一个名字为CQueue的数列,没有参数 -> []

    deleteHead:删除队列头部整数,不需要参数 -> []

    appendTail:增加队列尾部整数,需要参数 -> [3]

  

题目代码

class CQueue {
    input: number[] = [];
    output: number[] = [];
    appendTail(num: number): void {
        this.input.push(num);
    }

    deleteHead() {
        if (this.output.length != 0) {
            return <number>this.output.pop();
        } else {
            while (this.input.length != 0) {
                this.output.push(<number>this.input.pop());
            }
            return this.output.pop()  || -1;
        }
    }
}
var obj = new CQueue();
// console.log(obj)
obj.appendTail(3);
// console.log(obj)
var param_2 = obj.deleteHead();
console.log(param_2);
console.log(obj.deleteHead())
// console.log(obj)

方法二:数组

   var CQueue = function () {
        this.stack1 = []; // 入堆栈
        this.stack2 = []; // 出堆栈
      };

      /**
       * @param {number} value
       * @return {void}
       */
      //入栈时直接将元素push进数组
      CQueue.prototype.appendTail = function (value) {
        this.stack1.push(value);
      };

      /**
       * @return {number}
       */
      CQueue.prototype.deleteHead = function () {
        //出栈时如果出栈不为空则将其第一个元素删掉并返回
        if (this.stack2.length) {
          return this.stack2.shift();
        //出栈时如果入栈为空则直接返回负一
        } else if (!this.stack1.length) {
          return -1;
        } else {
          // 如果出栈为空而入栈不为空则依次将入栈中的第一个元素push进出栈中直到入栈为空然后再运行出栈函数deleteHead
          while (this.stack1.length) {
            this.stack2.push(this.stack1.shift());
          }
          return this.deleteHead();
        }
      };
      var obj = new CQueue();
      obj.appendTail(5);
      obj.appendTail(4);
      console.log(obj)
      var param_2 = obj.deleteHead();

 

 

题目来源:https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof/submissions/

https://leetcode-cn.com/study-plan/lcof/?progress=n517q27

 

posted @ 2022-01-10 20:18  山海南坪  阅读(34)  评论(0)    收藏  举报