Node* Sort(Node *head){
Node *p1=head,*p2=head->next;
//规定有序列表初始状态长度为1
//p2始终指向待插入结点的前驱
//p1用于在有序列表中查找插入的正确位置
while(p2->next!=NULL){//当p2没有后继时,证明序列已有序
Node*t=p2->next;//暂存待插入的结点
for(p1=head;p1->next->data < t->data && p1!=p2;p1=p1->next);
//循环查找t在有序表中的正确插入位置,结束条件为p1==p2||p1->next>data>=t->data
if(p1!=p2){//将t插入到p1的后方
//将t从链表中断除
p2->next=p2->next->next;
//更新t的next指向p1的next
t->next=p1->next;
//使p1的next指向t
p1->next=t;
//此处无需进行p2=p2->next的操作,因为p2->next已经等于原来的p2->next->next
}
else//p1=p2,说明t已在正确位置,便不做修改,将p2右移
p2=p2->next;
}
return head;
}
链表的插入排序,注意对于单链表的插入和删除,找到待插入或者待删除的结点的前驱是很重要的,注释的很清楚了,参考注释,有错误恳请指正!