本题源自LeetCode
--------------------------------------------------------------------
用插入法对链表排序
非递归:
ListNode *insertionSortList(ListNode *head) {
if(head==NULL || head->next==NULL)
return head;
ListNode* pre=head;
ListNode* p=head->next;
while(p){
if(p->val>=pre->val){
//不用插入
pre=pre->next;
p=p->next;
}else if(p->val<head->val){
//插入头结点之前
pre->next=p->next;
p->next=head;
head=p;
p=pre->next;
}else{
//插入已排序的某个节点前
ListNode* q=head;
while(q->next->val<p->val)
q=q->next;
//保持pre为待排序节点的上一个节点
pre->next=p->next;
p->next=q->next;
q->next=p;
//p 为待排序的节点
p=pre->next;
}
}
return head;
}