/** * struct ListNode { * int val; * struct ListNode *next; * }; */ /** * * @param head ListNode类 the head node * @return ListNode类 */ void Sort(int *arr, int left, int mid, int right) { int tmp[right-left+1]; int l = left; int m = mid + 1; int i = 0; int j = 0; while(l <= mid && m <= right) { if (arr[l] > arr[m]) { tmp[i++] = arr[m++]; } else { tmp[i++] = arr[l++]; } } while(l <= mid) { tmp[i++] = arr[l++]; } while(m <= right) { tmp[i++] = arr[m++]; } for (i = 0, j = left; j <=right; i++, j++) { arr[j] = tmp[i]; } } void MergeSort(int *arr, int left, int right) { if (left >= right) { return; } int mid = (left + right) / 2; MergeSort(arr, left, mid); MergeSort(arr, mid + 1, right); Sort(arr, left, mid, right); } struct ListNode* sortInList(struct ListNode* head ) { // write code here struct ListNode* phead = head; int arr[100000] = {0}; int i = 0; for (i = 0; phead != NULL; i++, phead = phead->next) { arr[i] = phead->val; } MergeSort(arr, 0, i-1); phead = head; for (i = 0; phead != NULL; i++, phead = phead->next) { phead->val = arr[i]; } return head; }