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