注意将链表拆分,和节点的调整
ListNode *insertionSortList(ListNode *head) {
ListNode *p = head;
ListNode *q = head;
ListNode *pre = NULL;
if(!p || !p->next) return head;
q = q->next;
head->next = NULL;
while(q){
int v = q->val;
p = head;
ListNode *r = q->next;
pre = NULL;//每轮开始pre都为空
while(p && p->val < v){
pre = p;
p = p->next;
}
if(pre){
q->next = pre->next;
pre->next = q;
}
else{
q->next = p;
head = q;//新节点放在第一位,调整head
}
q = r;
}
p = head;
return p;
}