Sort a linked list in O(n log n) time using constant space complexity.
The merge sort of the linked list.
/** Definition for singly-linked list. * struct ListNode {* int val; * ListNode *next; * ListNode (int x) : Val (x), Next (NULL) {}}; */classSolution { Public: ListNode* Sortlist (listnode*head) { if(head = = NULL | | head->next = = NULL)returnHead; ListNode*tail = head, *mid = head, *pre =Head; while(Tail && tail->next) {Pre=mid; Mid= mid->Next; Tail= tail->next->Next; } //Change pre next to null, make both sub list (head to pre, p1 to P2)Pre->next =NULL; ListNode*H1 =Sortlist (head); ListNode*H2 =Sortlist (mid); returnMerge (H1, H2); } ListNode* Merge (ListNode *h1, ListNode *H2) { if(H1 = = NULL)returnH2; if(H2 = = NULL)returnH1; if(H1->val < h2->val) {H1->next = Merge (h1->Next, H2); returnH1; } Else{H2->next = Merge (H1, h2->next); returnH2; } }};
148. Sort List