classSolution: defsortList(self, head: ListNode) -> ListNode: ifnot head ornot head.next: return head mid = self.find_mid(head) right = self.sortList(mid.next) mid.next = None left = self.sortList(head)
returnself.merge(left, right) defmerge(self, left, right): dummy = ListNode(0) tail = dummy while left and right: if left.val <= right.val: tail.next = left left = left.next else: tail.next = right right = right.next tail = tail.next if left: tail.next = left if right: tail.next = right return dummy.next
deffind_mid(self, head): slow, fast = head, head.next while fast and fast.next: fast = fast.next.next slow = slow.next return slow