• 剑指 Offer 09. 用两个栈实现队列(简单)


    通过率 71.9%

    题目链接

    题目描述:

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

    示例 1:

    输入:
    ["CQueue","appendTail","deleteHead","deleteHead"]
    [[],[3],[],[]]
    输出:[null,null,3,-1]

    示例 2:

    输入:
    ["CQueue","deleteHead","appendTail","appendTail","deleteHead","deleteHead"]
    [[],[],[5],[2],[],[]]
    输出:[null,-1,null,null,5,2]

    提示:

    • 1 <= values <= 10000
    • 最多会对 appendTail、deleteHead 进行 10000 次调用

    思路:

    栈的特点是后进先出,队列的特点是先进先出

    stackA维护入队操作,stackB维护出队操作

    • 入队的时候直接压入栈A就行,不必把栈B的值转移到A中后再压入(因为栈A中的值总是比B中的后进,只有B为空时才会将A中的值弹出)
    • 出队的时候先判断栈B是否有值,有就直接弹出;否则看栈A中是否有值,没有就返回-1(队列为空),有就将栈A的值转移到B中再弹出
     1 /* JavaScript */
     2 var CQueue = function() {
     3     CQueue.prototype.stackA = []
     4     CQueue.prototype.stackB = []
     5 };
     6 
     7 /** 
     8  * @param {number} value
     9  * @return {void}
    10  */
    11 CQueue.prototype.appendTail = function(value) {
    12     this.stackA.push(value)
    13 };
    14 
    15 /**
    16  * @return {number}
    17  */
    18 CQueue.prototype.deleteHead = function() {
    19     if(this.stackB.length) return this.stackB.pop()
    20     else if(!this.stackA.length) return -1
    21     else {
    22         while(this.stackA.length) this.stackB.push(this.stackA.pop())
    23         return this.stackB.pop()
    24     }
    25 };
    26 
    27 /**
    28  * Your CQueue object will be instantiated and called as such:
    29  * var obj = new CQueue()
    30  * obj.appendTail(value)
    31  * var param_2 = obj.deleteHead()
    32  */
  • 相关阅读:
    数据的输入输出
    运算符和表达式
    深入理解Magento – 第三章 – 布局,块和模板
    压抑中......
    css控制图片自适应大小
    问来北京的追求是什么
    magento目录结构精编版
    无所事事的日子。
    jQuery实现等比例缩放大图片让大图片自适应页面布局
    MVC 小常识
  • 原文地址:https://www.cnblogs.com/wwqzbl/p/15112644.html
Copyright © 2020-2023  润新知