采用归并排序,通过定义快、慢两个指针来找到中点,再采用之前的排序算法进行归并。
ListNode *listSort(ListNode *head) { //定义快慢指针,找到链表中心 ListNode *slow=head,*fast=head; while (fast->next!=nullptr&&fast->next->next!=nullptr) { slow = slow->next; fast = fast->next->next; } //分为两段 fast = slow; slow = slow->next; fast->next = nullptr; ListNode *l1=listSort(head); ListNode *l2=listSort(slow); return mergeList(l1, l2); }