当前位置: 首页 > news >正文

LeetCode 225. 用队列实现栈 java题解

https://leetcode.cn/problems/implement-stack-using-queues/submissions/

class MyStack {
    LinkedList<Integer> queue1; // 和栈中保持一样元素的队列
    LinkedList<Integer> queue2; // 辅助队列
    public MyStack() {
        queue1=new LinkedList<>();
        queue2=new LinkedList<>();
    }
    /* 只能使用队列的标准操作:放到队尾、弹出队首、size、isEmpty */
    /*
    入栈:放入非空的队列中
    */
    public void push(int x) {
        if(!queue1.isEmpty()){
            queue1.addLast(x);//放入队尾
        }
        else{
            queue2.addLast(x);
        }
    }
    /*
    出栈,把非空队列放入另一个空队列
    只留下一个在非空队列,然后弹出,成为了空队列
    */
    public int pop() {
        //queue1不为空
        if(!queue1.isEmpty()){
            while(queue1.size()>1){
                queue2.addLast(queue1.removeFirst());
            }
            return queue1.removeFirst();//弹出的是原queue1队尾
        }
        else{ //if(!queue2.isEmpty()){
            while(queue2.size()>1){
                queue1.addLast(queue2.removeFirst());
            }
            return queue2.removeFirst();//弹出的是原queue2队尾
        }
        // else{//都为空
        //     return null;
        // }
    }
    //先弹出栈顶元素,再加入进去
    public int top() {
        int res=pop();
        push(res);
        return res;
    }
    
    public boolean empty() {
        return queue1.isEmpty()&&queue2.isEmpty();
    }
}

/**
 * Your MyStack object will be instantiated and called as such:
 * MyStack obj = new MyStack();
 * obj.push(x);
 * int param_2 = obj.pop();
 * int param_3 = obj.top();
 * boolean param_4 = obj.empty();
 */

优化
其实这道题目就是用一个队列就够了。
一个队列在模拟栈弹出元素的时候只要将队列头部的元素(除了最后一个元素外) 重新添加到队列尾部,此时再去弹出元素就是栈的顺序了。

相关文章:

  • 《2025软件测试工程师面试》性能测试面试篇
  • C++知识整理day10——多态(多态的定义和实现、虚函数重写/覆盖、override和final关键字、纯虚函数和抽象类、多态的原理)
  • macOS skhd+ yabai
  • 动态扩缩容引发的JVM堆内存震荡:从原理到实践的GC调优指南
  • 标签的ref属性 vue中为什么不用id标记标签
  • RTC、直播、点播技术对比|腾讯云/即构/声网如何选型 — 2025 版
  • centos虚拟机安装
  • 嵌入式学习笔记-卡尔曼滤波,PID,MicroPython
  • 一、图形图像的基本概念
  • 《白帽子讲 Web 安全》之文件操作安全
  • 基于Android平台的SOME/IP测试模块 EPT-ETS
  • 一、计算机网络技术——概述、性能指标
  • React Native从入门到进阶详解
  • 探秘基带算法:从原理到5G时代的通信变革【九】QPSK调制/解调
  • 钉钉宜搭智能车辆管理系统:AIoT技术驱动的全场景解决方案(价值体现版)
  • ps学习一
  • 【JSON与JSONP】JSON与JSONP全面解析:定义、区别与核心技术对比
  • 《OpenCV》——卷积神经网络人脸检测
  • 网络编程相关概念
  • (十二)基于 Vue 3 和 Mapbox GL 实现的坐标拾取器组件示例
  • 我的科学观|梅彦昌:科技创新关键在于能否跑得快,而不是有没有钱
  • 经济日报整版聚焦:上海构建法治化营商环境,交出高分答卷
  • 小米SU7 Ultra风波升级:数百名车主要求退车,车主喊话雷军“保持真诚”
  • 济南市委副秘书长吕英伟已任历下区领导
  • 央行等印发《关于金融支持广州南沙深化面向世界的粤港澳全面合作的意见》
  • 学者纠错遭网暴,人民锐评:“饭圈”该走出畸形的怪圈了