class Solution: def sortLinkedList(self , head: ListNode) -> ListNode: # write code here if not head.next: return head p1, p2 = self.partition(head) p2 = self.reverse(p2) return self.merge(p1, p2) def partition(self, head): p2Head = head.next p1, p2 = head, p2Head while p2 and p2.next: p1.next = p2.next p2.next = p2.next.next p1 = p1.next p2 = p2.next p1.next = None # 注意这个地方 return [head, p2Head] def reverse(self, head): pre, cur = None, head while cur: tmp = cur.next cur.next = pre pre = cur cur = tmp return pre def merge(self, p1, p2): dummy = q = ListNode(-1) while p1 and p2: if p1.val < p2.val: q.next = p1 p1 = p1.next q = q.next else: q.next = p2 p2 = p2.next q = q.next if p1: q.next = p1 else: q.next = p2 return dummy.next # 1. 按奇偶位置拆分链表,得1->3->5->7->NULL和8->6->4->2->NULL # 2. 反转偶链表,得1->3->5->7->NULL和2->4->6->8->NULL # 3. 合并两个有序链表,得1->2->3->4->5->6->7->8->NULL