基于java用队列实现栈

news/2024/7/3 0:32:09

基于java用队列实现栈

问题描述

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

实现 MyStack 类:

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

注意:

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

实例

在这里插入图片描述

原题OJ链接

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

解答

class MyStack {

    Queue<Integer> que1;
    Queue<Integer> que2;

    public MyStack() {
        que1 = new LinkedList<>();
        que2 = new LinkedList<>();
    }

    public void push(int x) {
        if(!que1.isEmpty()){
            que1.offer(x);
        }else{
            if (!que2.isEmpty()){
                que2.offer(x);
            }
            else{
                que1.offer(x);
            }
        }
    }

    public int pop() {
        if(!que1.isEmpty()){
            /*for (int i = 0; i < que1.size()-1; i++) {
                int ret = que1.poll();
                que2.offer(ret);
            }*/
            //这样写是错误的,因为que1.size()随着弹出元素是会变化的
            int size = que1.size();
            for (int i = 0; i < size-1; i++) {
                int ret = que1.poll();
                que2.offer(ret);

            }
            return que1.poll();
        }
        else {
            if(!que2.isEmpty()){
                int size = que2.size();
                for (int i = 0; i < size-1; i++) {
                    int ret = que2.poll();
                    que1.offer(ret);
                }
                return que2.poll();
            }else{
                return -1;
            }
        }
    }

    public int top() {

        if(!que1.isEmpty()){
            int size = que1.size();
            int ret = 0;
            for (int i = 0; i < size; i++) {
                ret = que1.poll();
                que2.offer(ret);
            }
            return ret;
        }
        else {
            if(!que2.isEmpty()){
                int size = que2.size();
                int ret = 0;
                for (int i = 0; i < size; i++) {
                    ret = que2.poll();
                    que1.offer(ret);
                }
                return ret;
            }else{
                return -1;
            }
        }

    }

    public boolean empty() {
        return que1.isEmpty() && que2.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();
 */

测试结果

在这里插入图片描述


http://lihuaxi.xjx100.cn/news/1172455.html

相关文章

auto以及增强for循环概念

c11中auto并不代表一种实际的数据类型&#xff0c;它只是一个类型声明的占位符&#xff0c;auto也并不是再所有场景下都能推导出变量的实际类型&#xff0c;使用auto不需要进行初始化&#xff0c;让编译器推导出它的实际类型&#xff0c;再编译阶段将auto占位符替换为真正的类型…

这才是网络安全最系统的学习路线(建议收藏)

01 什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防两面…

Elasticsearch 8.8.0 发布

Elasticsearch 是一个基于 Lucene 库的搜索引擎。它提供了一个分布式、支持多租户的全文搜索引擎&#xff0c;具有 HTTP Web 接口和无模式 JSON 文档。Elasticsearch 基于 Java 开发&#xff0c;并在 SSPL Elastic License 双重授权许可下作为开源软件发布。 Elasticsearch 8…

《Linux运维总结:elasticsearch集群节点类型详解》

一、elasticsearch集群节点类型 在elasticsearch 中&#xff0c;节点可以分为以下几种类型&#xff1a; 1、主节点&#xff08;master node&#xff09; 主节点是 elasticsearch集群中的一种特殊节点&#xff0c;主要职责是负责集群操作相关的内容&#xff0c;如创建或删除索…

《微服务实战》 第十八章 Redis查看配置文件和数据类型

前言 本章节讲解如何查看、修改Redis配置&#xff0c;介绍Redis类型。 1、查看配置 config get 配置名称 2、修改配置项 config set 配置项名称 配置项值 2.1、配置项说明 配置项参数说明daemonizeno/yes默认为 no&#xff0c;表示 Redis 不是以守护进程的方式运行&#xff…

springboot+vue学生综合测评系统(java项目源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的学生综合测评系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xff1a;风…

Git的安装及基础命令

一. 安装Git 首先请前往Git官网去下载最新的安装包:https://git-scm.com/download/win 运行下载好的 .exe 文件&#xff0c;一路next即可。 右击桌面出现以下两个就算是成功。 安装完成后,需要设定用户名和邮箱来区分不同的用户。右击屏幕&#xff0c;选择“Git Bash Here”…

操作系统第一章练习题

目录 问答题 选择题 填空题 判断题 问答题 1、设计现代OS的主要目标是什么&#xff1f; 答&#xff1a;设计现代OS的主要目标是&#xff1a;方便性、有效性、可扩充性、开放性 2、OS的作用可表现在哪几个方面&#xff1f; 答&#xff1a;&#xff08;1&#xff09;从一…