Example #1
0
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;
}
Example #2
0
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);
}
Example #3
0
 ListNode* sortList(ListNode* head) {
     return sortMerge(head);
 }