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)); }