225. 用队列实现栈 --力扣 --JAVA

简介: 请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int top() 返回栈顶元素。boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。

 题目

请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(pushtoppopempty)。

实现 MyStack 类:

    • void push(int x) 将元素 x 压入栈顶。
    • int pop() 移除并返回栈顶元素。
    • int top() 返回栈顶元素。
    • boolean empty() 如果栈是空的,返回 true ;否则,返回 false

    注意:

      • 你只能使用队列的基本操作 —— 也就是 push to backpeek/pop from frontsizeis empty 这些操作。
      • 你所使用的语言也许不支持队列。 你可以使用 list (列表)或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。

      解题思路一

        1. 队列是先进先出而栈是先进后出,所以需要在队列添加数据时对队列进行倒置;

        代码展示

        class MyStack {
            Queue<Integer> queue1 = null;
            Queue<Integer> queue2 = null;
            public MyStack() {
                queue1 = new LinkedList<>();
                queue2 = new LinkedList<>();
            }
            public void push(int x) {
                queue2.offer(x);
                while (!queue1.isEmpty()){
                    queue2.offer(queue1.poll());
                }
                queue1 = queue2;
                queue2 = new LinkedList<>();
            }
            public int pop() {
                return queue1.poll();
            }
            public int top() {
                return queue1.peek();
            }
            public boolean empty() {
                return queue1.isEmpty();
            }
        }

        image.gif

        解题思路二

          1. 利用ArrayDeque双向队列,可以利用自带的读取和删除末尾的值的方法实现队列的先进后出。

          代码展示

          class MyStack {
              ArrayDeque<Integer> queue = null;
              public MyStack() {
                  queue = new ArrayDeque<>();
              }
              public void push(int x) {
                  queue.addLast(x);
              }
              public int pop() {
                  return queue.pollLast();
              }
              public int top() {
                  return queue.peekLast();
              }
              public boolean empty() {
                  return queue.isEmpty();
              }
          }

          image.gif


          目录
          相关文章
          |
          6月前
          |
          前端开发 Java
          java实现队列数据结构代码详解
          本文详细解析了Java中队列数据结构的实现,包括队列的基本概念、应用场景及代码实现。队列是一种遵循“先进先出”原则的线性结构,支持在队尾插入和队头删除操作。文章介绍了顺序队列与链式队列,并重点分析了循环队列的实现方式以解决溢出问题。通过具体代码示例(如`enqueue`入队和`dequeue`出队),展示了队列的操作逻辑,帮助读者深入理解其工作机制。
          166 1
          |
          8月前
          |
          存储 IDE Java
          java设置栈内存大小
          在Java应用中合理设置栈内存大小是确保程序稳定性和性能的重要措施。通过JVM参数 `-Xss`,可以灵活调整栈内存大小,以适应不同的应用场景。本文介绍了设置栈内存大小的方法、应用场景和注意事项,希望能帮助开发者更好地管理Java应用的内存资源。
          383 4
          |
          9月前
          |
          存储 监控 Java
          JAVA线程池有哪些队列? 以及它们的适用场景案例
          不同的线程池队列有着各自的特点和适用场景,在实际使用线程池时,需要根据具体的业务需求、系统资源状况以及对任务执行顺序、响应时间等方面的要求,合理选择相应的队列来构建线程池,以实现高效的任务处理。
          354 12
          |
          10月前
          |
          存储 算法 Java
          Java 内存管理与优化:掌控堆与栈,雕琢高效代码
          Java内存管理与优化是提升程序性能的关键。掌握堆与栈的运作机制,学习如何有效管理内存资源,雕琢出更加高效的代码,是每个Java开发者必备的技能。
          235 5
          |
          11月前
          |
          存储 算法 Java
          🧠Java零基础 - Java栈(Stack)详解
          【10月更文挑战第17天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
          381 2
          |
          12月前
          【LeetCode 24】225.用队列实现栈
          【LeetCode 24】225.用队列实现栈
          76 0
          |
          12月前
          |
          存储 算法 Java
          【用Java学习数据结构系列】用堆实现优先级队列
          【用Java学习数据结构系列】用堆实现优先级队列
          152 0
          |
          Unix Shell Linux
          LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
          本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
          189 6
          LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
          |
          Python
          【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
          本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
          141 6
          |
          搜索推荐 索引 Python
          【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
          本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
          306 2

          热门文章

          最新文章