# 沒有 或只只有一個 代表已經排好了 ifnot head ornot head.next: return head # 用快慢指針找到中間點 slow = head fast = head.next
while fast and fast.next: slow = slow.next fast = fast.next.next
mid= slow.next slow.next = None
# 遞迴調用 sortList 函式 排序左右兩邊 left = self.sortList(head) right = self.sortList(mid)
# 創建兩個指針,指向相同的 ListNode(0) h = res = ListNode(0) # 將兩個已排序鏈表的合併 while left and right: if left.val < right.val: h.next= left left = left.next # 如果左半部分鏈表的節點值小於右半部分鏈表的節點值, # 將 h 的下一個節點指向 left,同時更新 left 指針到下一個節點。 else: h.next = right right = right.next # 如果右半部分鏈表的節點值小於等於左半部分鏈表的節點值, # 將 h 的下一個節點指向 right,同時更新 right 指針到下一個節點 h = h.next # 更新 h 指針到下一個節點
# 連接剩下的 h.next = left if left else right return res.next