Example #1
0
ListNode* sortLinkList(ListNode *head) {
    if (head == NULL) return NULL;
    if (head->next == NULL) return head; 
    ListNode* head2 = partitionLinkList(head);
    head = sortLinkList(head);
    head2 = sortLinkList(head2);
    return mergeLinkList(head, head2);
}
ListNode* sortLinkList(ListNode *&head, int N) {
    if (N == 0) return NULL;
    if (N == 1) {
        ListNode* cur = head;
        head = head->next;
        cur->next = NULL;
        return cur;
    }
    int half = N / 2;
    ListNode* head1 = sortLinkList(head, half);
    ListNode* head2 = sortLinkList(head, N - half);
    return mergeList(head1, head2);
}
ListNode* sortLinkList(ListNode *head) {
    return sortLinkList(head, getLength(head));
}