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

 

 

 
 

转载于:https://www.cnblogs.com/TonyYPZhang/p/5087554.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值