对链表进行插入排序。
struct ListNode* insertionSortList(struct ListNode* head){
//链表为空或只有一个结点
if(head == NULL || head->next == NULL)
return head;
//1、循环的初始条件
struct ListNode* sortHead = head;
struct ListNode* cur = head->next; //找到head后面的结点
sortHead->next = NULL;
while(cur) //2、终止条件
{
//3、迭代条件
struct ListNode* next = cur->next; //保存下一结点的地址
//将cur结点插入到前面的有序区间
struct ListNode* p = NULL, *c = sortHead;
while(c)
{
if(cur->val < c->val)
{
break;
}
else //cur->val > c->val
{
p = c;
c = c->next;
}
}
//下面的if是为了防止c为空,最后插入的值比p还大,此时却插入不进去
if(p == NULL)
//头插,只在c前面
{
cur->next = c;
sortHead = cur;
}
else //在 p c中间插入
{
p->next = cur;
cur->next = c;
}
cur = next;
}
return sortHead;
}