1 /**
2 * Definition for singly-linked list.
3 * struct ListNode {
4 * int val;
5 * ListNode *next;
6 * ListNode(int x) : val(x), next(NULL) {}
7 * };
8 */
9 class Solution {
10 public:
11 ListNode * mergeList(ListNode * left, ListNode * right){
12 ListNode * head = NULL, *lastNode, *curNode;
13 while ((left != NULL) && (right != NULL)){
14 if (left->val <= right->val){
15 curNode = left;
16 left = left->next;
17 }
18 else {
19 curNode = right;
20 right = right->next;
21 }
22 if (head == NULL)
23 head = curNode;
24 else lastNode->next = curNode;
25 lastNode = curNode;
26 }
27 if (left != NULL){
28 if (head == NULL)
29 return left;
30 else lastNode->next = left;
31 }
32 if (right != NULL){
33 if (head == NULL)
34 return right;
35 else lastNode->next = right;
36 }
37 return head;
38 }
39 ListNode *sortList(ListNode *head) {
40 // IMPORTANT: Please reset any member data you declared, as
41 // the same Solution instance will be reused for each test case.
42 if (head == NULL || head->next == NULL)
43 return head;
44 ListNode * lhead = head, *rhead = head->next, *ltail = head;
45 ListNode * itr = head->next;
46 while ((itr != NULL) && (itr->next != NULL)){
47 ltail = ltail->next;
48 rhead = rhead->next;
49 itr = (itr->next)->next;
50 }
51 ltail->next = NULL;
52 return mergeList(sortList(lhead), sortList(rhead));
53 }
54 };