class Solution {
public:
ListNode *sortList(ListNode *head) {
if(head == NULL || head->next ==NULL){return head;}
ListNode *mid = getMid(head);
ListNode *right = mid->next;
mid->next = NULL;
ListNode *left = sortList(head);
right = sortList(right);
return merge(left,right);
}
ListNode *getMid(ListNode *head){
ListNode *fast = head->next;
ListNode *slow = head;
while(fast != NULL && fast->next != NULL && fast->next->next != NULL){
// fast != NULL && fast.next != NULL && fast.next.next != NULL 注意这种写法
fast = fast->next->next;
slow = slow->next;
}
return slow;
}
ListNode *merge(ListNode *head1, ListNode *head2){
ListNode *dummy = new ListNode(0);
ListNode *p = dummy;
while(head1 != NULL && head2 != NULL){
if(head1->val < head2->val) {
p->next = head1;
head1 = head1->next;
}
else {
p->next = head2;
head2 = head2->next;
}
p = p->next;
}
if(head1 != NULL) p->next = head1;
else p->next = head2;
return dummy->next;
}
};
参考:八大排序