[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     }

 

 

 
 
posted @ 2015-12-30 00:37  TonyYPZhang  阅读(456)  评论(0编辑  收藏  举报