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


    1. 题目

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

    2. 示例1

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

    3. 提示

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

    4. 题解

    说实话,要想看懂和这个题目真难!
    ["CQueue","appendTail","deleteHead","deleteHead"]
    [[],[3],[],[]]
    以上两个,第一个是具体操作,第二个是需要的参数。
    CQueue:创建队列,此时不需要参数
    appendTail:队尾新增元素,需要参数3
    deleteHead: 删除对头元素,不需要参数
    [null,null,3,-1],这个是返回值
    CQueue: 创建队列,返回null
    appendTail: 队尾新增元素3,返回null
    deleteHead: 删除队头元素(3),返回3
    deleteHead: 删除队头元素(此时为null),返回-1

    5. 实现

     1 public class CQueue09 {
     2     // 两个栈,一个出栈,一个入栈
     3     private Stack<Integer> stackIn;
     4     private Stack<Integer> stackOut;
     5 
     6     public CQueue09 () {
     7         stackIn = new Stack<>();
     8         stackOut = new Stack<>();
     9     }
    10 
    11     public void appendTail(int value) {
    12         stackIn.push(value);
    13     }
    14 
    15     public int deleteHead() {
    16         if(!stackOut.isEmpty()) {
    17             return stackOut.pop();
    18         } else {
    19             while (!stackIn.isEmpty()) {
    20                 stackOut.push(stackIn.pop());
    21             }
    22             return stackOut.isEmpty() ? -1 : stackOut.pop();
    23         }
    24     }
    25 }

    6. 结语

      努力去爱周围的每一个人,付出,不一定有收获,但是不付出就一定没有收获! 给街头卖艺的人零钱,不和深夜还在摆摊的小贩讨价还价。愿我的博客对你有所帮助(*^▽^*)(*^▽^*)!

      如果客官喜欢小生的园子,记得关注小生哟,小生会持续更新(#^.^#)(#^.^#)。

  • 相关阅读:
    第七次作业
    rfid工作原理
    实验九——基本数据类型存储及应用总结
    实验八——函数定义及调用总结
    实验七——函数定义及调用总结
    作业
    作业
    作业
    开始
    实验12——指针的基础应用2
  • 原文地址:https://www.cnblogs.com/haifwu/p/14922698.html
Copyright © 2020-2023  润新知