解决方案


方法一:输出到数组

思路和算法

按顺序将每个结点放入数组 A 中。然后中间结点就是 A[A.Length/2],因为我们可以通过索引检索每个结点。

复杂度分析

  • 时间复杂度:,其中 是给定列表中的结点数目。

  • 空间复杂度:A 用去的空间。


方法二:快慢指针法

思路和算法

当用慢指针 slow 遍历列表时,让另一个指针 fast 的速度是它的两倍。当 fast 到达列表的末尾时,slow 必然位于中间。

复杂度分析

  • 时间复杂度:,其中 是给定列表的结点数目

  • 空间复杂度:slowfast 用去的空间。