双指针+归并排序!图解排序链表!-知乎
class ListNode(object):def __init__(self, val=0, next=None):self.val = valself.next = nextclass Solution(object):def find_mid(self, head): # 快慢指针slow, fast = head, headwhile fast.next and fast.next.next:slow = slow.nextfast = fast.next.nextmid = slow.nextslow.next = Nonereturn head, middef merge(self, left, right):new = ListNode()node = newwhile left and right:if left.val < right.val:node.next = leftnode = leftleft = left.nextelse:node.next = rightnode = rightright = right.nextk = left if left else rightnode.next = kreturn new.nextdef sortList(self, head):""":type head: ListNode:rtype: ListNode"""if head is None or head.next is None:return headhead, mid = self.find_mid(head)head = self.sortList(head)mid = self.sortList(mid)return self.merge(head, mid)