每日做题之排序链表

题目描述

给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。

示例 1:
在这里插入图片描述

输入:head = [4,2,1,3]
输出:[1,2,3,4]
示例 2:
在这里插入图片描述

输入:head = [-1,5,3,4,0]
输出:[-1,0,3,4,5]
示例 3:
输入:head = []
输出:[]

提示:

  • 链表中节点的数目在范围 [0, 5 * 104] 内
  • -105 <= Node.val <= 105

进阶:你可以在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序吗?

思路

归并排序

归并解法

class Solution:
    def sortList(self, head: ListNode) -> ListNode:
        if not head or not head.next: 
            return head 

        slow, fast = head, head.next
        while fast and fast.next:
            fast, slow = fast.next.next, slow.next
        mid, slow.next = slow.next, None 

        left, right = self.sortList(head), self.sortList(mid)
       
        h = res = ListNode(0)
        while left and right:
            if left.val < right.val: 
                h.next, left = left, left.next
            else: 
                h.next, right = right, right.next

            h = h.next
        h.next = left or right
        return res.next


相关推荐

  1. 【LeetCode热100】【排序

    2024-04-28 09:18:01       129 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-28 09:18:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-28 09:18:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-28 09:18:01       82 阅读
  4. Python语言-面向对象

    2024-04-28 09:18:01       91 阅读

热门阅读

  1. react之state深入浅出

    2024-04-28 09:18:01       28 阅读
  2. 【Python快速上手(六)】

    2024-04-28 09:18:01       32 阅读
  3. 用户注册功能——责任链

    2024-04-28 09:18:01       38 阅读
  4. 模拟电子技术实验(十)

    2024-04-28 09:18:01       33 阅读
  5. 快速了解 git 和 github 是什么,30 分钟速通版

    2024-04-28 09:18:01       25 阅读
  6. 江苏宿迁服务器的优势有哪些?

    2024-04-28 09:18:01       32 阅读
  7. MySQL商城数据表(20-29)

    2024-04-28 09:18:01       29 阅读