单链表中间值(经典案例,5分钟解决)

2023-10-27

一、题目描述

给定一个单链表,但不知该表的大小,现要求只遍历一次,找出位于单链表中间的值。

输入

1,8,7,6,4,5,3,1

输出

6

样例输入 Copy

1,2,4,8,9,6,3,1,0

样例输出 Copy

9

二、实现方法

普通方法:首先遍历一遍获取总长度L,然后再次遍历循环至L/2即可;时间复杂度为:O(L+L/2)=O(3/2L)

快速方法:快慢指针法,设置2个指针faster,mid都指向单链表的头节点,其中faster移动的速度为mid的2倍,当faster移动到末尾,mid即在中间位置了,以下是简单实现:

三、代码

1.节点定义

 static class LinkNode {
        int val;
        LinkNode next;
        public LinkNode(int val){
            this.val = val;
        }
    }

2. 定义两个节点,一个快节点,一个慢节点
 快的节点一次走两步;慢的节点一次走一步
 当快的节点走到链表的最后时,慢的节点刚好走到一半,即链表的中间节点

public static void FindMid(LinkNode first){
        LinkNode fast = first;
        LinkNode slow = first;
 
        while((fast != null)&&(fast.next != null)){
            fast = fast.next.next;
            slow = slow.next;
        }
        System.out.println(slow.val);
    }

3.测试方法

 public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String str = scanner.next().toString();
        String[] arr  = str.split(",");
 
        int[] ints = new int[arr.length];
 
        for(int j = 0; j<ints.length;j++) {
            ints[j] = Integer.parseInt(arr[j]);
        }
        Stack<LinkNode> stack = new Stack<>();
        LinkNode head = new LinkNode(0);
        LinkNode p = head;
 
        for(int i = 0; i < ints.length; i++){
            p.next = new LinkNode(ints[i]);
            p = p.next;
            stack.add(p);
        }
        head = head.next;
        FindMid(head);
        }

4.完整代码

import java.util.Scanner;
import java.util.Stack;
 
public class Main {
    static class LinkNode {
        int val;
        LinkNode next;
        public LinkNode(int val){
            this.val = val;
        }
    }
    public static void FindMid(LinkNode first){
        LinkNode fast = first;
        LinkNode slow = first;
 
        while((fast != null)&&(fast.next != null)){
            fast = fast.next.next;
            slow = slow.next;
        }
        System.out.println(slow.val);
    }
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String str = scanner.next().toString();
        String[] arr  = str.split(",");
 
        int[] ints = new int[arr.length];
 
        for(int j = 0; j<ints.length;j++) {
            ints[j] = Integer.parseInt(arr[j]);
        }
        Stack<LinkNode> stack = new Stack<>();
        LinkNode head = new LinkNode(0);
        LinkNode p = head;
 
        for(int i = 0; i < ints.length; i++){
            p.next = new LinkNode(ints[i]);
            p = p.next;
            stack.add(p);
        }
        head = head.next;
        FindMid(head);
        }
    }

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单链表中间值(经典案例,5分钟解决) 的相关文章

  • 如何将 javax.persistence.Column 定义为 Unsigned TINYINT?

    我正在基于 MySQL 数据库中的现有表创建 Java 持久性实体 Bean 使用 NetBeans IDE 8 0 1 我在这个表中遇到了一个字段 其类型为 无符号 TINYINT 3 我发现可以执行以下操作将列的类型定义为 unsign
  • 如何将画廊意图中的“打开”更改为“完成”?

    我使用以下意图打开画廊来选择多个图像和视频 Intent intent new Intent intent setType image video intent putExtra Intent EXTRA ALLOW MULTIPLE tr
  • Java Runtime.getRuntime().freeMemory() 问题

    我搜索并看到了一些线程 但没有一个能够解决我遇到的具体问题 我正在尝试使用以下方式监视我的内存使用情况Runtime getRuntime freeMemory Runtime getRuntime maxMemory and Runtim
  • @RestController 没有 @ResponseBody 方法工作不正确

    我有以下控制器 RestController RequestMapping value base url public class MyController RequestMapping value child url method Req
  • 通过SOCKS代理连接Kafka

    我有一个在 AWS 上运行的 Kafka 集群 我想用标准连接到集群卡夫卡控制台消费者从我的应用程序服务器 应用程序服务器可以通过 SOCKS 代理访问互联网 无需身份验证 如何告诉 Kafka 客户端通过代理进行连接 我尝试了很多事情 包
  • JVisualVM/JConsole 中的 System.gc() 与 GC 按钮

    我目前正在测试处理 XML 模式的概念验证原型 并围绕一个非常消耗内存的树自动机外部库 我已经获得了源代码 构建 我想绘制 真实峰值 堆 随着模式大小的增加 不同运行的内存消耗 使用的指标符合我的目的并且不会影响问题 或者至少是它的合理近似
  • 在 Wildfly 中与 war 部署共享 util jar 文件

    假设我有一个名为 util jar 的 jar 文件 该 jar 文件主要包含 JPA 实体和一些 util 类 无 EJB 如何使这个 jar 可用于 Wildfly 中部署的所有 war 无需将 jar 放置在 war 的 WEB IN
  • 自动生成Flyway的迁移SQL

    当通过 Java 代码添加新模型 字段等时 JPA Hibernate 的自动模式生成是否可以生成新的 Flyway 迁移 捕获自动生成的 SQL 并将其直接保存到新的 Flyway 迁移中 以供审查 编辑 提交到项目存储库 这将很有用 预
  • 如何避免 ArrayIndexOutOfBoundsException 或 IndexOutOfBoundsException? [复制]

    这个问题在这里已经有答案了 如果你的问题是我得到了java lang ArrayIndexOutOfBoundsException在我的代码中 我不明白为什么会发生这种情况 这意味着什么以及如何避免它 这应该是最全面的典范 https me
  • 读取电子邮件的文本文件转换为 Javamail MimeMessage

    我有一个电子邮件原始来源的文本文件 直接从 gmail 复制 如果您单击 查看原始文件 您就会看到它 我想读入该文件并将其转换为 MimeMessage 如果您好奇为什么 我设置了 JavaMaildir 并且需要用电子邮件填充它的收件箱以
  • Freemarker 和 Struts 2,有时它计算为序列+扩展哈希

    首先我要说的是 使用 Struts2 Freemarker 真是太棒了 然而有些事情让我发疯 因为我不明白为什么会发生这种情况 我在这里问是因为也许其他人有一个想法可以分享 我有一个动作 有一个属性 说 private String myT
  • 使用架构注册表对 avro 消息进行 Spring 云合约测试

    我正在查看 spring 文档和 spring github 我可以看到一些非常基本的内容examples https github com spring cloud samples spring cloud contract sample
  • HashMap 值需要不可变吗?

    我知道 HashMap 中的键需要是不可变的 或者至少确保它们的哈希码 hashCode 不会改变或与另一个具有不同状态的对象发生冲突 但是 HashMap中存储的值是否需要与上面相同 为什么或者为什么不 这个想法是能够改变值 例如在其上调
  • java库维护数据库结构

    我的应用程序一直在开发 所以偶尔 当版本升级时 需要创建 更改 删除一些表 修改一些数据等 通常需要执行一些sql代码 是否有一个 Java 库可用于使我的数据库结构保持最新 通过分析类似 db structure version 信息并执
  • JMenu 中的文本居中

    好吧 我一直在网上寻找有关此问题的帮助 但我尝试的任何方法似乎都不起作用 我想让所有菜单文本都集中在菜单按钮上 当我使用setHorizontalTextPosition JMenu CENTER 没有变化 事实上 无论我使用什么常量 菜单
  • Hamcrest Matchers - 断言列表类型

    问题 我目前正在尝试使用 Hamcrest Matchers 来断言返回的列表类型是特定类型 例如 假设我的服务调用返回以下列表 List
  • Android:无法发送http post

    我一直在绞尽脑汁试图弄清楚如何在 Android 中发送 post 方法 这就是我的代码的样子 public class HomeActivity extends Activity implements OnClickListener pr
  • stm32l0: 执行MI命令失败。使用 vFlashErase 数据包擦除闪存时出错

    我正在使用 Nucleo STM32L031 和 AC6 STM32 工作台 eclipse 我编写应用程序并进入调试模式 一切正常 直到我在应用程序中添加另一个功能 我注意到当我删除 评论 新函数 软件可以再次进入调试模式 但是当我添加
  • 如何使用play框架上传多个文件?

    我在用play framework 2 1 2 使用java我正在创建视图来上传多个文件 我的代码在这里 form action routes upload up enctype gt multipart form data
  • org.apache.commons.net.io.CopyStreamException:复制时捕获 IOException

    我正在尝试使用以下方法中的代码将在我的服务器中创建的一些文件复制到 FTP 但奇怪的是我随机地低于错误 我无法弄清楚发生了什么 Exception org apache commons net io CopyStreamException

随机推荐

  • el-dialog 导致无法触发背后图层的鼠标事件的解决方法

    说明 如上图 el dialog 对话框出现时默认情况下是点击不了 点击测试123123 这个按钮的 因为 el dialog 出现时 属于最上层的图层 后面的图层会被它覆盖 导致触发不了后面图层的鼠标事件 上图是解决了这个问题之后可以点击
  • 使用UltralISO制作ubuntu启动盘

    1 从Ubuntu官网Ubuntu系统下载 Ubuntu下载系统的iso文件 用来制作的U盘需要是FAT32格式的 可以通过格式化U盘更改
  • 上传拍照的图片base64存储

    上传base64图片功能 这里只放了上传图片的实现类代码 业务逻辑 新增数据时 应该是先上传图片 然后把生产的uuid返回给前台 前台在新增数据时把图片id集合传给后台 拍照图片上传 param resourceChangePicReq 传
  • 网络编程之IO复用机制(多路IO转接)之select实现IO复用的思路02

    1 select实现IO复用的思路02 下面的都是伪代码 主要讲究思路 1 lfd socket 2 bind 3 listen 4 将lfd添加到select的读集合用于传入 借助内核帮我们监听事件 而不直接调用accept函数监听 为了
  • jmeter生成接口测试报告

    一 安装Ant配置 1 下载地址 https ant apache org bindownload cgi 2 安装Ant 下载解压 3 配置环境变量 新建变量ANT HOME 值为D ant apache ant 1 10 12 系统变量
  • 机器学习、深度学习、图像检索 的一些优秀博客

    机器学习 深度学习 图像检索 的一些优秀博客 1 http www cnblogs com ooon 2 http yongyuan name blog
  • 怎么向OpenHarmony的Git仓推送代码

    1 Git设置 git config global user name yourname 随意 git config global user email your email address DCO验证的邮箱 设置记住密码 git conf
  • React Hooks 在使用上有哪些限制?

    React Hooks 的限制主要有两条 不要在循环 条件或嵌套函数中调用 Hook 在 React 的函数组件中调用 Hook 那为什么会有这样的限制呢 就得从 Hooks 的设计说起 Hooks 的设计初衷是为了改进 React 组件的
  • 【docker-compose】从构建镜像到一键运行Java项目

    先来思考个问题 新机器跑一个常规springboot项目要几步 1 下载并配置java环境 mysql环境 redis环境 6步 2 初始化mysql数据库 导入sql文件 2步 3 下载jar包 启动 2步 大概分为零零碎碎的十多步 每块
  • EasyExcel使用教程-实现页面中批量导入导出数据-详解

    EasyExcel介绍 EasyExcel是阿里巴巴开源的一个excel处理框架 以使用简单 节省内存著称 EasyExcel能大大减少占用内存的主要原因是在解析Excel时没有将文件数据一次性全部加载到内存中 而是从磁盘上一行行读取数据
  • PhpStorm 部署web到apache 教程

    1 Edit Configrations 进去之后点server 因为是本地部署 所以写localhost就可以 其他不用动 之后下面有一个start Url 意思就是你点击运行时浏览器要打开的那个界面 我们写项目名称就可以 2 Tool
  • iframe跨域没有权限_浅谈跨域威胁与安全

    WEB前端中最常见的两种安全风险 XSS与CSRF XSS 即跨站脚本攻击 CSRF即跨站请求伪造 两者属于跨域安全攻击 对于常见的XSS以及CSRF在此不多谈论 仅谈论一些不太常见的跨域技术以及安全威胁 一 域 域 即域名对应的网站 不同
  • 阿里云服务器和轻量云服务器对比有什么区别?

    阿里云轻量应用服务器和云服务器ECS有什么区别 ECS是专业级云服务器 轻量应用服务器是轻量级服务器 轻量服务器使用门槛更低 适合个人开发者或中小企业新手使用 可视化运维 云服务器ECS适合集群类 高可用 高容灾企业级架构 使用相对于轻量更
  • 详细解析STM32的时钟系统

    STM32的时钟系统 一 时钟系统框图 1 1 STM32F10x 1 2 STM32F40x 二 时钟系统 2 1 STM32F10x时钟源 HSI RC振荡器 频率8MHz 精度不高HSE 外接石英 陶瓷晶振 4MHz 16MHz LS
  • java的作用域

    文章目录 作用域 细节 注意 作用域 在java中 主要变量就是成员变量和局部变量 一般局部变量指的是成员方法中定义的变量 作用域的分为全局变量和局部变量 全局变量的作用域在整个类体 除了属性之外的都是局部变量 作用域只能用于某块 全局变量
  • 软件测试质量度量指标

    软件测试质量度量指标 度量模块 度量指标 统计方法 度量说明 产品完成度 1 需求通过率 已通过需求 已计划需求 体现需求的完成度 也常可以统计为 测试用例通过数 计划的测试用例总数 即默认用例覆盖是完全的 2 功能点通过率 已通过功能点
  • 安装驱动时出现“INF中的服务安装段落无效”

    今天安装ti开发板的驱动 在安装虚拟串口时出现 INF中的服务安装段落无效 以致驱动未安装成功 接下来我就说说我的解决过程 因为提示的是 inf中的 了解驱动的就知道有个扩展名为inf的文件 于是准备 打开驱动目录中的inf文件 如下图 有
  • 【延期至12月】2022年网络安全国际研讨会(CSW2022)

    延期至12月 2022年网络安全国际研讨会 CSW2022 重要信息 会议网址 www cybersecurityworkshop org 会议时间 2022年12月16 18日 召开地点 杭州 截稿时间 2022年10月20日 录用通知
  • 商业不是战争

    我在一个大客户那里工作的时候经常想这样一件事 他们 以及国内很多 IT或者非IT 企业 讲军事化管理 讲服从命令 为什么我总觉得这事不对 到底不对在什么地方 我想出来的结论是 商业不是战争 第一 商业的特点是negotiatable 战争是
  • 单链表中间值(经典案例,5分钟解决)

    一 题目描述 给定一个单链表 但不知该表的大小 现要求只遍历一次 找出位于单链表中间的值 输入 1 8 7 6 4 5 3 1 输出 6 样例输入 Copy 1 2 4 8 9 6 3 1 0 样例输出 Copy 9 二 实现方法 普通方法