难度:中等
题目描述:
思路总结:题目要求时间复杂度O(nlog(n)),想到二分——>想到归并。归并递归解法,额外空间并不是常数级,所以想到非递归自底向上的解法。
题解一:(递归)
# 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:
#思路:归并排序——递归实现
if not head or not head.next:return head
slow ,fast = head, head.next
while fast and fast.next:
slow = slow.next
fast = fast.next.next
mid = slow.next
slow.next = None
left, right = self.sortList(head), self.sortList(mid)
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