LNode* sortMerge(LNode* pfrontList, LNode* pbackList) { if (pfrontList == NULL) return pbackList; else if (pbackList == NULL) return pfrontList; LNode* ret = NULL; if (pfrontList->val <= pbackList->val) { ret = pfrontList; ret->next = sortMerge(pfrontList->next, pbackList); } else { ret = pbackList; ret->next = sortMerge(pfrontList, pbackList->next); } return ret; }
void mergeSortForList(LNode** phead) { LNode* head = *phead; LNode* a; LNode* b; if (head == NULL || head->next == NULL) return; splitList(head, &a, &b); mergeSortForList(&a); mergeSortForList(&b); *phead = sortMerge(a, b); }
ListNode* sortList(ListNode* head) { return sortMerge(head); }