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

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 次,因此总的时间复杂度是线性的。

相关文章:

  • Python核心技巧 类与实例:面向对象编程的基石
  • 41.寻找缺失的第一个正数:原地哈希算法详解
  • 开元类双端互动组件部署实战全流程教程(第2部分:控制端协议拆解与机器人逻辑调试)
  • 精益数据分析(41/126):深入解读移动应用商业模式的关键指标与策略
  • Leetcode刷题记录32——搜索二维矩阵 II
  • SecureCRT 使用指南:安装、设置与高效操作
  • 判断题材持续性
  • 进程的程序替换——exec系列函数的使用
  • 深入浅出数据库规范化的三大范式
  • Redis能保证数据不丢失吗之AOF
  • Red Hat6.4环境下搭建NFS服务器
  • 30天通过软考高项-第十一天
  • 算法中的数学:质数(素数)
  • chili3d笔记11 连接yolo python http.server 跨域请求 flask
  • CRS 16 slot 设备硬件架构
  • [学成在线]23-面试题总结
  • window 系统 使用ollama + docker + deepseek R1+ Dify 搭建本地个人助手
  • GZIPOutputStream 类详解
  • GPIO引脚的上拉下拉以及转换速度到底怎么选
  • macbook install chromedriver
  • AI世界的年轻人|“热潮下要有定力”,她的目标是让机器人真正步入家庭
  • 沙发上躺赢又如何?告别冠军绝缘体的凯恩,要开始收割荣誉了
  • 江南华南较强降雨扰返程,北方大部需防风沙
  • 新加坡2025年大选开始投票
  • 天津航空一航班盘旋14圈才降落,客服:因天气影响
  • 阿根廷发生5.6级地震,震源深度30公里