[LeetCode] 147. Insertion Sort List 解题思路
Sort a linked list using insertion sort.
问题:实现单向链表的插入排序。
这是比较常规的一个算法题目。 从左往右扫列表,每次将指针的下一个元素插入前面已排好序的对应位置中。
需要注意的一定是,列表只能定位下一个元素,不能定位前一个元素,所有,每次插入位置的适合,都是对左右指针的下一个元素进行操作。
1 void insertSort(ListNode* p1, ListNode* p2){ 2 ListNode* next2 = p2->next; 3 p2->next = p2->next->next; 4 next2->next = p1->next; 5 p1->next = next2; 6 } 7 8 ListNode* insertionSortList(ListNode* head) { 9 10 if (head == NULL){ 11 return head; 12 } 13 14 ListNode* r = head; 15 16 while(r->next != NULL){ 17 ListNode* l = new ListNode(0); 18 l->next = head; 19 while(l != r){ 20 if (l->next->val > r->next->val){ 21 22 if (l->next == head) { 23 head = r->next; 24 } 25 26 insertSort(l, r); 27 break; 28 } 29 l = l->next; 30 } 31 32 if (r->next != NULL && r->next->val >= r->val) { 33 r = r->next; 34 } 35 } 36 37 return head; 38 }