Java for You 数据结构 链表的中间结点 | LeetCode 876

链表的中间结点 | LeetCode 876

题目描述

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

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

​

示例 1:

image.png

示例 2:

image.png

​

提示:

  • 链表的结点数范围是 [1, 100]
  • 1 <= Node.val <= 100

​

题目解析

一次遍历就得到中间节点,使用「快慢指针」的技巧:

  • 我们让两个指针 slow 和 fast 分别指向链表头结点 head。
  • 每当慢指针 slow 前进一步,快指针 fast 就前进两步,这样,当 fast 走到链表末尾时,slow 就指向了链表中点。

参考代码

以下为 Java 代码。

​

​

复杂度分析

​

  • 时间复杂度:O(N),其中 N 是给定链表的结点数目。
  • 空间复杂度:O(1),只需要常数空间存放 slow 和 fast 两个指针。
本文由 java4u.cn 发布,可自由转载、引用,但需署名作者且注明文章出处(作者:白色蜗牛,出处:java4u.cn)。如转载至微信公众号,请在文末添加作者公众号二维码。 https://java4u.cn/algorithms/3304.html

作者: 蜗牛

环形链表 | LeetCode 141

删除链表的倒数第 N 个结点 | LeetCode 19

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

联系我们

公众号:蜗牛互联网

在线咨询: QQ交谈

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部