雙指針+歸并排序!圖解排序鏈表!-知乎
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)