Tencent 33-sorted linked list

Tencent 33-sorted linked list leetcode148

Under O (n log n) time complexity and constant space complexity, sort the linked list.

Example 1:

Input: 4-> 2-> 1-> 3
Output: 1-> 2-> 3-> 4
Example 2:

Input: -1-> 5-> 3-> 4-> 0
Output: -1-> 0-> 3-> 4-> 5

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def sortList(self, head: ListNode) -> ListNode:
        #解法比较唯一,归并排序+取中点(fast and slow)
        ##递归的终止条件必须先写
        if not head or not head.next: return head # termination.
        # cut the LinkedList at the mid index.
        slow, fast = head, head
        while fast and fast.next.next:
            fast, slow = fast.next.next, slow.next
        mid, slow.next = slow.next, None # save and cut.
        # recursive for cutting.
        left, right = self.sortList(head), self.sortList(mid)
        # merge `left` and `right` linked list and return it.
        h = res = ListNode(0)
        while left and right:
            if left.val < right.val: h.next, left = left, left.next
            else: h.next, right = right, right.next
            h = h.next
        h.next = left if left else right
        return res.next
Published 93 original articles · praised 8 · 10,000+ views

Guess you like

Origin blog.csdn.net/zlb872551601/article/details/103648042