📅  最后修改于: 2023-12-03 14:51:27.247000             🧑  作者: Mango
中位数是指在一组数据中,居于中间位置的数,即把数据从小到大排列,第N个数就是中位数,当数据个数为偶数时,中位数为第N/2个数和第N/2+1个数的平均数。在一个排序链表中查找中位数,就是要找到链表中间位置的节点值。
对于链表,我们很容易想到快慢指针。我们可以设置两个指针,一个慢指针slow,每次走一步,一个快指针fast,每次走两步。当快指针走到链表末尾的时候,慢指针就走到了链表中间位置。
# Python3 实现
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class Solution:
def findMedian(self, head: ListNode) -> float:
slow = fast = head
while fast and fast.next:
slow = slow.next
fast = fast.next.next
if fast:
return slow.val
else:
return (slow.val + slow.next.val)/2
快慢指针只遍历一次链表,时间复杂度是 O(N),空间复杂度是 O(1)。