📜  在排序链表中查找中位数(1)

📅  最后修改于: 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)。