美文网首页
排序链表 归并

排序链表 归并

作者: hustyanye | 来源:发表于2019-07-21 15:01 被阅读0次

https://leetcode-cn.com/explore/interview/card/bytedance/244/linked-list-and-tree/1040/

image.png

要求用O(nlogn)复杂度的排序,只有归并比较适合
在归并中注意递归的merge的时机
在链表一分为二的时候,用一个慢节点和快节点跑步来找
代码如下:


class Solution(object):
    def sortList(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        if not head or not head.next:
            return head
        p = head
        p2 = p.next.next
        while p2:
            if not p2.next or not p2.next.next:
                break
            p = p.next
            p2 = p2.next.next
        p_right = p.next
        p.next = None
        left = self.sortList(head)
        right = self.sortList(p_right)
        return self.mergeList(left,right)
        
        
    
    def mergeList(self,l1,l2):
        if not l1:
            return l2
        if not l2:
            return l1
        new_list = None
        head = None
        while l1 and l2:
            tmp_node = l1
            if l1.val>l2.val:
                tmp_node = l2
                l2 = l2.next
            else:
                l1 = l1.next
            if not new_list:
                new_list = ListNode(tmp_node.val)
                head = new_list
            else:
                next_node = ListNode(tmp_node.val)
                new_list.next = next_node
                new_list = next_node
        if l1:
            new_list.next = l1
        if l2:
            new_list.next = l2
            
        return head

相关文章

  • LeetCode 专题 :分治算法

    LeetCode 第 23 题:归并多个有序链表 传送门:23. 合并K个排序链表。 合并 k 个排序链表,返回合...

  • python链表归并排序

    利用归并排序的思想,使用o(nlogn)时间复杂度,排序链表

  • 148. Sort List

    链表排序,使用归并排序 Runtime: 268 ms, faster than 17.27% Memory Us...

  • 23. Merge k Sorted Lists

    题目描述:将k个已排序的链表合并为一条排好序的链表。分析复杂度。分析:k个链表的归并可以利用归并排序的思想,每次取...

  • 归并的思想解决链表排序、多个链表合并问题

    1. 23.合并多个有序链表 与归并排序思想一致,两两合并。 2. 148. 排序链表 思路:与归并思想一致 快慢...

  • 【leetCode】148. Sort List 解题报告

    -- 关键字:链表、归并排序-- 难度:Medium-- 题目大意:对一个链表排序,时间复杂度:O(NlogN) ...

  • 排序链表 归并

    https://leetcode-cn.com/explore/interview/card/bytedance/...

  • 面试算法:单链表的归并排序

    链表适合插入和删除,不适合检索,尤其是单向链表中寻找节点的父节点。 归并排序:归并排序对于数组来说,空间复杂度为N...

  • 常见算法

    单链表反转 冒泡排序 选择排序 插入排序 希尔排序 快速排序 归并排序 堆排序 二分查找 重建二叉树

  • 结构|链表

    学习笔记,可能有些谬误,请批判性阅读。 先给出链表的定义。 链表排序 归并排序用起来 删除链表倒数第n个节点 双指...

网友评论

      本文标题:排序链表 归并

      本文链接:https://www.haomeiwen.com/subject/eromlctx.html