平均星级:4.47 (30次评分)
给你单链表的头结点 head ,请你找出并返回链表的中间结点。
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
思路和算法
按顺序将每个结点放入数组 A 中。然后中间结点就是 A[A.Length/2],因为我们可以通过索引检索每个结点。
A
A[A.Length/2]
复杂度分析
时间复杂度:,其中 是给定列表中的结点数目。
空间复杂度:,A 用去的空间。
当用慢指针 slow 遍历列表时,让另一个指针 fast 的速度是它的两倍。当 fast 到达列表的末尾时,slow 必然位于中间。
slow
fast
时间复杂度:,其中 是给定列表的结点数目
空间复杂度:,slow 和 fast 用去的空间。