zoukankan      html  css  js  c++  java
  • leetcode148 Sort List

     1 """
     2 Sort a linked list in O(n log n) time using constant space complexity.
     3 Example 1:
     4 Input: 4->2->1->3
     5 Output: 1->2->3->4
     6 Example 2:
     7 Input: -1->5->3->4->0
     8 Output: -1->0->3->4->5
     9 """
    10 """
    11 这道题,主要分为两个步骤。
    12 第一是用快慢指针法,找到链表的中间位置将链表一分为二
    13 第二与leetcode21类似,https://www.cnblogs.com/yawenw/p/12273855.html
    14 将两个链表合并为一个有序链表
    15 整个过程采用递归的方法
    16 """
    17 
    18 class ListNode:
    19     def __init__(self, x):
    20         self.val = x
    21         self.next = None
    22 
    23 class Solution:
    24     def sortList(self, head):
    25         if not head or not head.next:
    26             return head
    27         cut, slow, fast = head, head, head  # cut指针用来截断链表
    28         while fast and fast.next:
    29             cut = slow
    30             slow = slow.next
    31             fast = fast.next.next
    32         cut.next = None  # bug 没写.next 理解截断的作用
    33         l1 = self.sortList(head)
    34         l2 = self.sortList(slow)
    35         return self.Merge(l1, l2)
    36 
    37     def Merge(self, l1, l2):
    38         head = ListNode(0)
    39         first = head  # 存结果的头指针
    40         while l1 and l2:
    41             if l1.val < l2.val:
    42                 head.next = l1
    43                 l1 = l1.next
    44             else:
    45                 head.next = l2
    46                 l2 = l2.next
    47             head = head.next  # !!!head随之向后移 容易忘
    48         head.next = l1 if l1 else l2
    49         # if not l2:
    50         #     move.next = l1
    51         # if not l1:
    52         #     move.next = l2
    53         return first.next
  • 相关阅读:
    #Laravel笔记# 使用SMTP发送邮件功能
    #Laravel笔记# 监听事件
    idea 常见问题
    python常见函数汇总
    双DNN排序模型:在线知识蒸馏在爱奇艺推荐的实践
    机器学习算法GBDT
    Hive表数据同步到es
    目标检测资料
    zeppelin的介绍与使用
    Java汉字获取拼音、笔划、偏旁部首
  • 原文地址:https://www.cnblogs.com/yawenw/p/12324146.html
Copyright © 2011-2022 走看看