0%

代码随想录第十三天

链表-对链表进行插入排序

题目链接

插入排序的基本思想是,维护一个有序序列,初始时有序序列只有一个元素,每次将一个新的元素插入到有序序列中,将有序序列的长度增加 1,直到全部元素都加入到有序序列中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
struct ListNode* insertionSortList(struct ListNode* head){
typedef struct ListNode ListNode;
ListNode* dummyNode = (ListNode*)malloc(sizeof(ListNode));
dummyNode->next = head;
ListNode* cur = head->next;
ListNode* LastStored = head;
while(cur){
if(cur->val >= LastStored->val)LastStored = LastStored->next;
else{
ListNode* prev = dummyNode;
while(prev->next->val <= cur->val)prev = prev->next;

LastStored->next = cur->next;
cur->next = prev->next;
prev->next = cur;

}
cur = LastStored->next;
}
return dummyNode->next;


}