对链表进行插入排序。
插入排序算法:
插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。
每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。
重复直到所有输入数据插入完为止。
解题思路:
此题可以先创建一个排序空链表,对于每一个节点找到它在排序链表中的合适位置,然后进入插入操作。先让排序链表链上第一个值,依次比较。

/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
typedef struct ListNode Node;
struct ListNode* insertionSortList(struct ListNode* head){
if(head == NULL || head->next ==NULL)
return head;
Node* SortList = (Node*)malloc(sizeof(Node));
SortList->next = head;
head = head->next;
SortList->next->next = NULL;
//剩余节点插入
Node* cur = head;
while(cur)
{
Node* next = cur->next;
// 从排序链表的头开始,给待插入的节点找到一个合适的位置
Node* sortprev = SortList;
Node* sorttail = SortList->next;
while(sorttail)
{
if(cur->val > sorttail->val)
{
sortprev = sorttail;
sorttail = sorttail->next;
}
else
{
break;
}
}
//在合适位置进行插入
sortprev->next = cur;
cur->next = sorttail;
cur = next;
}
Node* list = SortList->next;
free(SortList);
return list;
}
1486

被折叠的 条评论
为什么被折叠?



