Sort a linked list using insertion sort.
1:插入排序;2:将链表中的每一个节点插入到已经排号的序列中
ListNode *insertionSortList(ListNode *head)
{
if(head == NULL || head->next == NULL)
{
return head;
}
ListNode* newHead = head;
ListNode* index = newHead;
ListNode* nextNode = head->next;
newHead->next = NULL;
ListNode* preNode = NULL;
ListNode* curNode = newHead;
while(nextNode)
{
ListNode* tempNode = nextNode->next;
while(curNode && curNode->val < nextNode->val)
{
preNode = curNode;
curNode = curNode->next;
}
if(curNode == NULL)
{
index->next = nextNode;
index = index->next;
index->next = NULL;
}
else if(curNode == newHead)
{
nextNode->next = newHead;
newHead = nextNode;
}
else
{
nextNode->next = curNode;
preNode->next = nextNode;
}
preNode = NULL;
curNode = newHead;
nextNode = tempNode;
}
return newHead;
}