LeetCode:链表的中间结点

1、题目描述

给你单链表的头结点 head ,请你找出并返回链表的中间结点。

如果有两个中间结点,则返回第二个中间结点。

示例 1:

输入:head = [1,2,3,4,5]
输出:[3,4,5]
解释:链表只有一个中间结点,值为 3 。

示例 2:

输入:head = [1,2,3,4,5,6]
输出:[4,5,6]
解释:该链表有两个中间结点,值分别为 3 和 4 ,返回第二个结点。

提示:

  • 链表的结点数范围是 [1, 100]

  • 1 <= Node.val <= 100

2、解题思路--快慢指针

使用快慢指针(Fast-Slow Pointer)来找到链表的中间节点:

  • 快指针(fast):每次移动 两步fast = fast.next.next)。

  • 慢指针(slow):每次移动 一步slow = slow.next)。

当快指针到达链表末尾时,慢指针正好指向链表的中间节点。

关键点
  1. 循环条件

    • while (fast != null && fast.next != null)

      • fast != null:确保快指针没有越界(适用于奇数长度链表)。

      • fast.next != null:确保快指针可以移动两步(适用于偶数长度链表)。

  2. 奇数长度链表

    • 链表长度为奇数时,快指针最终会指向最后一个节点fast.next == null),此时慢指针正好指向中间节点

    • 例如:1 -> 2 -> 3 -> 4 -> 5,慢指针指向 3

  3. 偶数长度链表

    • 链表长度为偶数时,快指针最终会指向 null(因为 fast.next.next 会越界),此时慢指针指向第二个中间节点(题目通常要求返回第二个中间节点)。

    • 例如:1 -> 2 -> 3 -> 4,慢指针指向 3(第二个中间节点)。

public static ListNode middleNode(ListNode head) {ListNode fast = head, slow = head;while (fast != null && fast.next != null) {fast = fast.next.next;  // 快指针每次走两步slow = slow.next;       // 慢指针每次走一步}return slow;  // 慢指针指向中间节点
}
时间复杂度
  • O(n),其中 n 是链表的长度。

  • 快指针遍历链表约 n/2 次,慢指针移动 n/2 次,因此总的时间复杂度是线性的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/79552.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LabVIEW温控系统热敏电阻滞后问题

在 LabVIEW 构建的温控系统中&#xff0c;热敏电阻因热时间常数大&#xff08;2 秒左右&#xff09;产生的滞后效应&#xff0c;致使控温出现超调与波动。在不更换传感器的前提下&#xff0c;可从算法优化、硬件调整和系统设计等维度着手解决。 ​ 一、算法优化​ 1. 改进 PI…

技术犯规计入个人犯规吗·棒球1号位

在棒球运动中&#xff0c;虽然没有“技术犯规”这一特定术语&#xff0c;但存在多种违规行为或违反规则的情况&#xff0c;通常会导致判罚或处罚。以下是常见的违规行为及相关规则&#xff1a; 1. 投手违规&#xff08;Balk&#xff09; 定义&#xff1a;投手在垒上有跑垒员时…

Python核心技巧 类与实例:面向对象编程的基石

、核心概念图解 &#x1f3af; 类 vs 实例 类&#xff1a;对象的蓝图&#xff08;如"汽车设计图"&#xff09; 实例&#xff1a;类的具体实现&#xff08;如"你的特斯拉Model 3"&#xff09; class MyClass: # 类声明 count 0 # 类…

协程补充---viewModelScope 相关知识点

viewModelScope.launch 默认在 Dispatchers.Default 线程池执行Dispatchers.Default 是一个后台线程池&#xff0c;专门用于 CPU 密集型任务如果需要在主线程执行&#xff0c;必须显式指定 Dispatchers.Main remember 是 Compose 的状态管理函数(queueMenus) 是依赖项&#xff…

linux stm32mp157 GIC-V2 中断处理过程分析

/* ** 中断触发时&#xff0c;调用的 handle_arch_irq 入口地址。 ** 因为此时&#xff0c;挂接的就是 gic_handle_irq 函数&#xff01;gic_handle_irq 是个全局函数指针&#xff0c; ** static void __exception_irq_entry gic_handle_irq(struct pt_regs *regs) ** 它是Lin…

动态指令参数:根据组件状态调整指令行为

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 &#x1f35a; 蓝桥云课签约作者、…

直方图比较

目录 1、直方图比较的概念 2、直方图比较的主要原因 3、典型应用场景 4、基础直方图比较 5、多通道直方图比较 6、实时直方图检测 1、直方图比较的概念 直方图比较是通过数学方法计算两个直方图之间的相似度或差异度的技术。在计算机视觉中&#xff0c;直方图是对图像特征…

Windows11 VS code 安装 Cline 调用 Github MCP 配置过程坑点汇总

背景 为了调研 MCP 在 windows 上如何使用本地的命令执行一些操作而实现自动化的过程&#xff0c;在 B 站视频的指导下&#xff0c;进行相应填坑过程&#xff0c;最终运行起来&#xff0c;并实现 github 自动化编程并提交代码的过程。 B 站 Cline 视频演示 Cline Cline 是一…

kdump详解

kdump 是 Linux 系统中的一种内核崩溃转储机制&#xff0c;用于在系统崩溃时将内存中的数据保存到磁盘上&#xff0c;以便后续分析系统崩溃的原因。以下是对 kdump 的详细介绍&#xff1a; 1、工作原理 kdump 利用了 Linux 系统中的双启动机制。当系统启动时&#xff0c;它会…

RGB三原色

本文来源 &#xff1a; 腾讯元宝 ​​RGB三原色&#xff08;红绿蓝&#xff09;详解​​ RGB&#xff08;Red, Green, Blue&#xff09;是光学的三原色&#xff0c;通过不同比例的混合可以产生人眼可见的绝大多数颜色。它是现代显示技术&#xff08;如屏幕、投影仪&#xff09…

CSS兼容性:挑战与策略

CSS兼容性&#xff1a;挑战与策略 引言 在前端开发的广阔领域中&#xff0c;跨浏览器兼容性无疑是最棘手且难以预测的挑战之一。当我们精心设计的网页在Chrome中完美呈现&#xff0c;却在Safari中布局崩溃&#xff0c;或在Firefox中交互失效时&#xff0c;这种挫折感是每位前…

[ 设计模式 ] | 单例模式

单例模式是什么&#xff1f;哪两种模式&#xff1f; 单例模式就是一个类型的对象&#xff0c;只有一个&#xff0c;比如说搜索引擎中的索引部分&#xff0c;360安全卫士的桌面悬浮球。 饿汉模式和懒汉模式&#xff1a;饿汉模式是线程安全的&#xff0c;懒汉模式不是线程安全的…

Notebook.ai 开源程序是一套工具,供作家、游戏设计师和角色扮演者创建宏伟的宇宙 - 以及其中的一切

​一、软件介绍 文末提供程序和源码下载 Notebook.ai 开源程序是一套工具&#xff0c;供作家、游戏设计师和角色扮演者创建宏伟的宇宙 - 以及其中的一切。 二、软件特点 Notebook 是作家的规划工具&#xff0c;用于创建从宇宙到角色、情节到单个项目的任何内容。通过浏览器、…

centos7.0无法安装php8.2/8.3

在centos安装php8.2报错 configure: error: *** A compiler with support for C17 language features is required. 配置过程检测到你的系统编译器不支持 C17 语言特性&#xff0c;而 PHP 8.2 的编译需要编译器支持 C17 sudo yum update -y sudo yum install centos-releas…

Three.js + React 实战系列 - 客户评价区细解教程 Clients 组件✨(回答式评价 + 评分星级)

对个人主页设计和实现感兴趣的朋友可以订阅我的专栏哦&#xff01;&#xff01;谢谢大家&#xff01;&#xff01;&#xff01; 在这篇博客中&#xff0c;我们将实现一个简洁的 Hear from My Clients 客户评价区域。这个区块在个人主页中可以突显用户体验和专业度&#xff0c;帮…

Vim 命令从头学习记录

学习链接&#xff1a;eleon-vim基础教程 Vim - 基础翻屏操作 光标移动&#xff1a;hjkl 20j 向下移动20行&#xff0c;w 向后移动一个字符&#xff0c;b 向前移动一个字符。 Ctrl u 向上翻半页 UP Ctrl d 向下翻半页 Down Ctrl f 向下翻整页 Forward Ctrl b 向上翻整页 …

Linux系统编程--基础指令(!!详细讲解+知识拓展)

第一讲 基础指令 ​ 我们现如今自己使用的电脑大部分是用的都是windows或者macOS&#xff0c;并配合上由微软和苹果开发的图形化界面&#xff0c;所以使用鼠标再屏幕上进行点击即可完成许多任务。但是作为操作系统的学习者&#xff0c;在linux的基础上不再使用图形化界进行操作…

ADK 第四篇 Runner 执行器

智能体执行器 Runner&#xff0c;负责完成一次用户需求的响应&#xff0c;是ADK中真正让Agent运行起来的引擎&#xff0c;其核心功能和Agents SDK中的Runner类似&#xff0c;具体作用如下&#xff1a; 会话管理&#xff1a;自动读取/写入 SessionService&#xff0c;维护历史信…

【Tauri2】37——后端处理invoke

目录 前言 正文 随便看看 看看get 看看parse_invoke_request 看看message_handler 看看handle_ipc_message 看看webview的on_message方法 第一种情况的处理 第二种情况的处理 运行通信函数 返回的处理 整个流程 前言 【Tauri2】033 __TAURI_INTERNALS__和invoke-C…

kotlin 05flow -从 LiveData 迁移到 Kotlin Flow 完整教程

一 从 LiveData 迁移到 Kotlin Flow 完整教程 LiveData 长期以来是 Android 架构组件中状态管理的核心&#xff0c;但随着 Kotlin Flow 的成熟&#xff0c;Google 官方推荐将现有 LiveData 迁移到 Flow。本教程基于官方文章并扩展实践细节&#xff0c;完成平滑迁移。 一、为什…