栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

LeetCode 148(Python)-排序链表(Sort List)-快慢指针与归并排序

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LeetCode 148(Python)-排序链表(Sort List)-快慢指针与归并排序

1. 问题

要求用时间复杂度O(nlgn)与空间复杂度O(1)来排序一个链表

2. 解决思路

用快慢指针和归并排序来解决,思路见下图

class Solution:
    def merge(self, left, right):
        dummy_head = tail = ListNode(None)
        while left and right:
            if left.val <= right.val:
                tail.next = left
                left = left.next
            else:
                tail.next = right
                right = right.next
            tail = tail.next
        if left and right is None:
            tail.next = left
        elif right and left is None:
            tail.next = right
        return dummy_head.next

    def sortList(self, head: Optional[ListNode]) -> Optional[ListNode]:
        if head is None or head.next is None:
            return head

        pre = None
        slow = head
        fast = head

        while fast and fast.next:
            pre = slow
            slow = slow.next
            fast = fast.next.next
        pre.next = None
        return self.merge(*map(self.sortList, (head, slow)))
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/998197.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号