classListNode(object):def__init__(self, val=0,next=None):
self.val = val
self.next=nextclassSolution(object):deffind_mid(self, head):# 快慢指针
slow, fast = head, head
while fast.nextand fast.next.next:
slow = slow.next
fast = fast.next.next
mid = slow.next
slow.next=Nonereturn head, mid
defmerge(self, left, right):
new = ListNode()
node = new
while left and right:if left.val < right.val:
node.next= left
node = left
left = left.nextelse:
node.next= right
node = right
right = right.next
k = left if left else right
node.next= k
return new.nextdefsortList(self, head):"""
:type head: ListNode
:rtype: ListNode
"""if head isNoneor head.nextisNone:return head
head, mid = self.find_mid(head)
head = self.sortList(head)
mid = self.sortList(mid)return self.merge(head, mid)