【LeetCode】225. 用队列实现栈(Queue接口 & Deque类)

今日学习的文章链接和视频链接

leetcode题目地址:225. 用队列实现栈

代码随想录题解地址:代码随想录

题目简介

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

实现 MyStack 类:

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

看到题目的第一想法(可以贴代码)

  1. Java Queue类

队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。

LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用。

java 复制代码
class MyStack {
    Queue<Integer> q1;
    Queue<Integer> q2;
    public MyStack() {
        q1 = new LinkedList<>();
        q2 = new LinkedList<>();
    }
    
    public void push(int x) {
        if(q1.isEmpty()) q2.offer(x);
        else q1.offer(x);
    }
    
    public int pop() {
        if(q1.isEmpty()){
            dump();
            return q2.poll();
        } else{
            dump();
            return q1.poll();
        }
    }
    
    public int top() {
        if(q1.isEmpty()){
            dump();
            int res = q2.element();
            q1.offer(q2.poll());
            return res;
        } else{
            dump();
            int res = q1.element();
            q2.offer(q1.poll());
            return res;
        }
    }
    
    public boolean empty() return q1.isEmpty() && q2.isEmpty();
    
    public void dump(){
        if(q1.isEmpty()) while (q2.size() > 1) q1.offer(q2.poll());
        else while (q1.size() > 1) q2.offer(q1.poll());
    }
}

实现过程中遇到哪些困难

看完代码随想录之后的想法

【解题思路】Java Queue 的基础操作。

看完视频自己写的ACC:

java 复制代码
class MyStack {
    Queue<Integer> q1;
    Queue<Integer> q2;
    public MyStack() {
        q1 = new LinkedList<>();
        q2 = new LinkedList<>();
    }
    
    public void push(int x) {
        q2.offer(x);
        while (!q1.isEmpty()) q2.offer(q1.poll());
        Queue<Integer> temp = q2;
        q2 = q1;
        q1 = temp;
    }
    
    public int pop() {
        return q1.poll();
    }
    
    public int top() {
        return q1.element();
    }
    
    public boolean empty() {return q1.isEmpty();}
    
}

学习时长


今日收获

  1. Java Queue类

队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。

LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用。

【初始化】Queue<String> queue = new LinkedList<String>();

队列 Queue接口(LinkeList类) 常用方法

//add()和remove()方法在失败的时候会抛出异常(不推荐)

**  add** 增加一个元索 如果队列已满,则抛出IIIegaISlabEepeplian异常
**  remove** 移除并返回队列头部的元素 如果队列为空,则抛出NoSuchElementException异常
**  element** 返回队列头部的元素 如果队列为空,则抛出NoSuchElementException异常
**  offer** 添加一个元素并返回true 如果队列已满,则返回false
**  poll** 移除并返问队列头部的元素 如果队列为空,则返回null
**  peek** 返回队列头部的元素 如果队列为空,则返回null
**  put** 添加一个元素 如果队列满,则阻塞
**  take** 移除并返回队列头部的元素 如果队列为空,则阻塞

**drainTo(list)**一次性取出队列所有元素

  1. queue.isEmpty(), 为空返回true,不为空返回false
  2. queue.size(), 为空返回0,不为空返回一个大于1的整数。

知识点: remove、element、offer 、poll、peek 其实是属于Queue接口。

  1. 【初始化】

Queue<String> q1 = new LinkedList<String>();

Queue<Integer> q1 = new ArrayDeque<>();

Deque<Integer> q1 = new ArrayDeque<>();

3. 双端队列 Deque类 常用方法

由于Deque继承了Queue接口,因此它继承了Queue接口的所有方法,Deque还包括以下方法:

  • addFirst() - 在双端队列的开头添加指定的元素。如果双端队列已满,则引发异常。

  • addLast() - 在双端队列的末尾添加指定的元素。如果双端队列已满,则引发异常。

  • offerFirst() - 在双端队列的开头添加指定的元素。如果双端队列已满,则返回false。

  • offerLast() - 在双端队列的末尾添加指定的元素。如果双端队列已满,则返回false。

  • getFirst() - 返回双端队列的第一个元素。如果双端队列为空,则引发异常。

  • getLast() - 返回双端队列的最后一个元素。如果双端队列为空,则引发异常。

  • peekFirst() - 返回双端队列的第一个元素。如果双端队列为空,则返回null。

  • peekLast() - 返回双端队列的最后一个元素。如果双端队列为空,则返回null。

  • removeFirst() - 返回并删除双端队列的第一个元素。如果双端队列为空,则引发异常。

  • removeLast() - 返回并删除双端队列的最后一个元素。如果双端队列为空,则引发异常。

  • pollFirst() - 返回并删除双端队列的第一个元素。如果双端队列为空,则返回null。

  • pollLast() - 返回并删除双端队列的最后一个元素。如果双端队列为空,则返回null。

相关推荐
南境十里·墨染春水12 分钟前
C++ 工厂模式:从入门到进阶,彻底掌握对象创建的艺术
开发语言·c++·算法
@insist12323 分钟前
系统架构设计师-实时性评价、调度算法与内核架构选型
算法·架构·系统架构·软考·系统架构设计师·软件水平考试
一只齐刘海的猫6 小时前
【Leetcode】找到字符串中所有字母异位词
算法·leetcode·职场和发展
海清河晏1116 小时前
数据结构 | 八大排序
数据结构·算法·排序算法
IronMurphy7 小时前
【算法五十七】146. LRU 缓存
算法·缓存
文艺倾年7 小时前
【强化学习】强化学习基本概念,20W字总结(一)
人工智能·python·语言模型·自然语言处理·面试·职场和发展·大模型
凌波粒8 小时前
LeetCode--108.将有序数组转换为二叉搜索树(二叉树)
算法·leetcode·职场和发展
liulilittle8 小时前
KCC:在 BBR 思路上的一次探索
网络·tcp/ip·算法·bbr·通信·拥塞控制·kcc
浦信仿真大讲堂8 小时前
达索系统SIMULIA Abaqus 2026接触和约束的增强新功能介绍
人工智能·python·算法·仿真软件·达索软件