LeetCode 147. 对链表进行插入排序

题目链接:https://leetcode-cn.com/problems/insertion-sort-list/

插入排序算法:

插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。
每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。
重复直到所有输入数据插入完为止。

示例 1:

输入: 4->2->1->3
输出: 1->2->3->4
示例 2:

输入: -1->5->3->4->0
输出: -1->0->3->4->5

 1 struct ListNode* insertionSortList(struct ListNode* head){
 2     if(head==NULL||head->next==NULL) return head;
 3     struct ListNode* L=(struct ListNode*)malloc(sizeof(struct ListNode));
 4     L->next=head;
 5     struct ListNode *p=head->next,*pre,*tmp,*rear;
 6     rear=head;
 7     head->next=NULL;
 8     while(p){
 9         tmp=p->next;
10         if(p->val>rear->val){
11             rear->next=p;
12             rear=p;
13             rear->next=NULL;
14             p=tmp;
15         }else{
16             pre=L;
17             while(pre->next&&pre->next->val<p->val){
18                 pre=pre->next;
19             }
20             p->next=pre->next;
21             pre->next=p;
22             p=tmp;
23         }
24     }
25     return L->next;
26 }

 

posted @ 2020-03-07 10:56  wydxry  阅读(230)  评论(0编辑  收藏  举报
Live2D