Sort a linked list using insertion sort.
对一个线性链表排序,维护两对指针即可。
ListNode *insertionSortList(ListNode *head) {
if( !head )
return NULL;
ListNode *cur = head->next, *precur = head, *ptr, *pre;
while( cur )
{
pre = ptr = head;
while( ptr != cur && ptr->val < cur->val )
{
pre = ptr;
ptr = ptr->next;
}
if( ptr != cur )
{
precur->next = cur->next;//维护cur前后节点的连续性
if( ptr == head )
{
cur->next = head;
head = cur;
}
else
{
cur->next = pre->next;
pre->next = cur;
}
cur = precur->next;//更新当前节点
}
else
{
precur = cur;
cur = cur->next;
}
}
return head;
}