首页 > 其他 > 详细

[LeetCode] 147. Insertion Sort List 解题思路

时间:2015-12-30 01:47:09      阅读:110      评论:0      收藏:0      [点我收藏+]

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     }

 

 

 
 

[LeetCode] 147. Insertion Sort List 解题思路

原文:http://www.cnblogs.com/TonyYPZhang/p/5087554.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!