2014.1.14 21:58
Sort a linked list using insertion sort.
Solution:
Everyone must've have learned about insertion sort on some data structure textbooks, like "Data Structures & Algorithm Analysis". They usually present you with source code for insertion sort on arrays. In this problem, you're required to sort a linked list in a similar manner.
For each list node, use linear search to find the position where it should be inserted. Some boundary conditions need extra code to process, do it carefully.
Time complexity is O(n^2), space complexity is O(1).
Accepted code:
1 class Solution { 2 public: 3 ListNode *insertionSortList(ListNode *head) { 4 if(nullptr == head){ 5 return head; 6 } 7 ListNode *ptr, *root; 8 ListNode *p1, *p2; 9 10 root = head; 11 head = head->next; 12 root->next = nullptr; 13 while(head != nullptr){ 14 p1 = head->next; 15 ptr = root; 16 if(head->val <= root->val){ 17 head->next = root; 18 root = head; 19 }else{ 20 while(ptr->next != nullptr){ 21 if(head->val >= ptr->val && head->val <= ptr->next->val){ 22 break; 23 }else{ 24 ptr = ptr->next; 25 } 26 } 27 p2 = ptr->next; 28 ptr->next = head; 29 head->next = p2; 30 } 31 head = p1; 32 } 33 34 // 1WA here, not head = root->next; 35 head = root; 36 return head; 37 } 38 };