题目描述
给你单链表的头结点 head ,请你找出并返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。
示例 1:

示例 2:

提示:
- 链表的结点数范围是 [1, 100]
- 1 <= Node.val <= 100
题目解析
一次遍历就得到中间节点,使用「快慢指针」的技巧:
- 我们让两个指针 slow 和 fast 分别指向链表头结点 head。
- 每当慢指针 slow 前进一步,快指针 fast 就前进两步,这样,当 fast 走到链表末尾时,slow 就指向了链表中点。
参考代码
以下为 Java 代码。
复杂度分析
- 时间复杂度:O(N),其中 N 是给定链表的结点数目。
- 空间复杂度:O(1),只需要常数空间存放 slow 和 fast 两个指针。

