148. 排序链表(medium)

2019-06-13  本文已影响0人  genggejianyi

在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。
示例 1:
输入: 4->2->1->3
输出: 1->2->3->4
示例 2:
输入: -1->5->3->4->0
输出: -1->0->3->4->5

# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution(object):
    def sortList(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        if not head or not head.next:
            return head
        pre,slow,quick = None,head,head
        while quick and quick.next:
            pre = slow
            slow = slow.next
            quick = quick.next.next
        pre.next = None
        return self.merge(*map(self.sortList,(head,slow)))
    def merge(self,l1,l2):
        if l1 and l2:
            if l1.val > l2.val:
                l1,l2 = l2,l1
            l1.next = self.merge(l1.next,l2)
        return l1 or l2
上一篇 下一篇

猜你喜欢

热点阅读