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


          目录
          相关文章
          |
          2月前
          |
          前端开发 Java
          java中的Queue队列的用法
          java中的Queue队列的用法
          19 1
          LeetCode 热题100——单调栈
          LeetCode 热题100——单调栈
          19 0
          |
          2月前
          |
          算法 Java
          [Java·算法·简单] LeetCode 27. 移除元素 详细解读
          [Java·算法·简单] LeetCode 27. 移除元素 详细解读
          23 1
          |
          20天前
          |
          算法 Java C语言
          C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
          C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
          |
          6天前
          |
          存储 安全 Java
          Java多线程实战-从零手搓一个简易线程池(一)定义任务等待队列
          Java多线程实战-从零手搓一个简易线程池(一)定义任务等待队列
          |
          7天前
          |
          存储 Java C++
          Java集合篇之深度解析Queue,单端队列、双端队列、优先级队列、阻塞队列
          Java集合篇之深度解析Queue,单端队列、双端队列、优先级队列、阻塞队列
          20 0
          |
          7天前
          |
          存储 算法 安全
          Java集合篇之逐渐被遗忘的Stack,手写一个栈你会吗?
          Java集合篇之逐渐被遗忘的Stack,手写一个栈你会吗?
          14 0
          |
          16天前
          |
          消息中间件 Java API
          RabbitMQ入门指南(五):Java声明队列、交换机以及绑定
          RabbitMQ是一个高效、可靠的开源消息队列系统,广泛用于软件开发、数据传输、微服务等领域。本文主要介绍了Java声明队列、交换机以及绑定队列和交换机等内容。
          25 0
          |
          2月前
          |
          Java
          【Java】栈和队列的模拟实现(包括循环队列)
          【Java】栈和队列的模拟实现(包括循环队列)
          5 0
          |
          2月前
          |
          存储
          leetcode1944. 队列中可以看到的人数
          leetcode1944. 队列中可以看到的人数
          16 0