推荐答案
-- -------------------- ---- ------- ----- --------- --- -------------- ------ ----------- -------- - --- --------- - ---- --- ----------------- --------- -- --------- ---- - ---- - ---- ----- ---- --- ---------- ---- - --------- ---- - -------------- ------ ----
本题详细解读
问题描述
给定一个单链表,要求找到链表的中间节点。如果链表长度为偶数,则返回第二个中间节点。
解题思路
- 快慢指针法:使用两个指针,一个慢指针每次移动一步,一个快指针每次移动两步。当快指针到达链表末尾时,慢指针正好指向链表的中间节点。
- 时间复杂度:O(n),其中 n 是链表的长度。快指针遍历链表一次。
- 空间复杂度:O(1),只使用了常数级别的额外空间。
代码实现
-- -------------------- ---- ------- ----- --------- --- -------------- ------ ----------- -------- - --- --------- - ---- --- ----------------- --------- -- --------- ---- - ---- - ---- ----- ---- --- ---------- ---- - --------- ---- - -------------- ------ ----
示例
假设链表为 1 -> 2 -> 3 -> 4 -> 5
,则中间节点为 3
。
-- -------------------- ---- ------- - ---- ---- - ----------- --------- - ----------- -------------- - ----------- ------------------- - ----------- ------------------------ - ----------- - ------ ------ - ----------------- ----------------- - --- -
注意事项
- 如果链表为空,直接返回
None
。 - 如果链表长度为偶数,返回第二个中间节点。例如,链表
1 -> 2 -> 3 -> 4
的中间节点为3
。