zoukankan      html  css  js  c++  java
  • LeetCode 148. 排序链表

    148. 排序链表

    Difficulty: 中等

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

    进阶:

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

    示例 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 * 10<sup>4</sup>] 内
    • -10<sup>5</sup> <= Node.val <= 10<sup>5</sup>

    Solution

    Language: ****

    # Definition for singly-linked list.
    # class ListNode:
    #     def __init__(self, val=0, next=None):
    #         self.val = val
    #         self.next = next
    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:
                slow = slow.next
                fast = fast.next.next
                
            start = slow.next
            slow.next = None
            l, r = self.sortList(head), self.sortList(start)
            return self.merge(l, r)
                
            
        def merge(self, l, r):
            if not l or not r:
                return l or r
            
            dummy = p = ListNode(-1)
            while l and r:
                if l.val < r.val:
                    p.next = l
                    l = l.next
                else:
                    p.next = r
                    r = r.next
                p = p.next
                
            p.next = l or r
            return dummy.next
    
  • 相关阅读:
    剑指 Offer 46. 把数字翻译成字符串
    leedcode:27. 移除元素
    1052. 爱生气的书店老板(滑动窗口)
    剑指 Offer 56
    剑指 Offer 11. 旋转数组的最小数字(二分)
    1919年巴黎和会顾维钧英语演讲稿
    状语从句
    定语从句
    名词性从句
    并列句
  • 原文地址:https://www.cnblogs.com/swordspoet/p/14209281.html
Copyright © 2011-2022 走看看