node *insertSort(node *h, node *t) //head为空时指向NULL,输入时已经令t->next = NULL
{
if(!h) return t; // 空链表
node *p, *q;
p = NULL;
q = h;
while(q->next != NULL)//对后继做判断的,遍历到尾节点
{
if(//request)
{
if(!p)//在表头插入
{t->next = q; return t;}
else //插在pq之间
{p->next = t; t->next = q;return h;}
}
else//p,q指针同时后移
{p = q;
q = q->next;}
}
//对尾节点的讨论,类似中间节点
if(//request)
{
if(!p)//表头
{ t->next = q; return t; }
else//pq之间
{ p->next = t; t->next = q; return h; }
}
else // t放在最后
{ q->next = t ; return h ;}
}
node *insertSort(node *h, node *t)
{
node *p=NULL,*q=h; //定位第一个插入点:链首
while(q && q->data<t->data) //查找插入点
{//两个指针并行后移
p=q;
q=q->next;
}
if(p==NULL) //插入链首
{
t->next = h;
return t;
}
if(q==NULL) //插入链尾
{
p->next = t;
t->next = NULL;
return h;
}
//插入p、q之间
t->next=q;
p->next=t;
return h;
}