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

    8.11更新 快速排序看起来更易懂,而且更好操作

    题解来自 https://leetcode-cn.com/problems/sort-list/solution/python-by-scut_dell/

    技巧:

      1. 设置None,是的链表Node有变量可指,用这种方法存储了链表

        Big = None

        if cur.val>head.val: 

          t.next = Big

          Big = t

      2. 合并的时候 用两个变量指向同一个节点

        res = ListNode(None)

        cur = res

      3. 同一个函数里同时 分和合,使用递归。

        a) 前半部分遍历链表,分成三部分

        b) 递归分割合并big,small

        c) 遍历 small equal big 合并

     

     ——————————————————————————————————————————————————————————————————————————

    仔细看了下,答案中采用了 递归的归并排序方法:

    1. Cut步骤: 在顶层将完整的ListNode分成两半, basecase 是 head is None or head.next is None

    2.Merge步骤: 将分割完后的 Node1 Node2 调用合并函数,返回值是 合并好的头节点

    注意点: 在Cut函数里,在已经分割了head1 head2 后 重复调用cut函数 实现递归

    下为教程链接

    https://leetcode-cn.com/problems/sort-list/solution/zi-di-xiang-shang-de-gui-bing-pai-xu-java-dai-ma-b/

    1.Cut递归:def sort(self,head):

    顶层:

    slow = head

    fast = head

    while fast.next and fast.next.next:

      fast = fast.next.next

      slow = slow.next

    head2 = slow.next

    slow.next = None

    leftListnode = self.sort(head)

    rightListnode = self.sort(head2)

    return merge(leftListnode,rightListnode)

    解析:

        顶层要解决 切分并找到两个头节点 head head2 并通过递归返回 已经sort的 左右两链表的头节点 leftListnode 和 rightListnode

        然后再把两个sorted好的 头节点 再merge一遍 最后返回 头节点

    底层:

    if head is None or head.next is None:

      return head

    解析:

        本来最后就是要得到 sort好了的链表的头节点,所以当遇到None的时候,直接return head

        

    2. Merge 递归:def merger(left,right):

    顶层:

    if left.val < right.val:

      left.next = mergeList(left.next,right)

      return left

    else:

      right.next = mergeList(right.next,left)

      return right

                  

      解读:

        最后要得到的肯定是头节点,所以要返回最小值的头节点

        然后递归的得到最小的节点,由next拼凑在一起

    底层:

       if left is None :

        return right

       if right is None:

        return left

      解读:

        若其中一个链表已空,则返回另一链表的剩下全部序列

  • 相关阅读:
    [恢]hdu 2098
    [恢]hdu 2049
    [恢]hdu 2027
    [恢]hdu 2111
    [恢]hdu 1202
    [恢]hdu 2131
    Windows Phone 7 文件下载进度和速度显示
    深入WPF中的图像画刷(ImageBrush)之1——ImageBrush使用举例
    深入WPF中的图像画刷(ImageBrush)之2——ImageBrush的铺设方式
    textblock设置属性
  • 原文地址:https://www.cnblogs.com/ChevisZhang/p/12233352.html
Copyright © 2011-2022 走看看