第1个回答 2020-03-26
你稍微改动下,应该可以,算法是一样的
void
order()
{
t=head;
p=head;
//
r=head;//head是原链表的头
u=0;
//t指向链表中score最大的一个链
while(p->next!=0)
{
if(p->next->score
>
t->score)
{
t=p->next;
u=p;
}
//
if(p!=head)r=r->next;//r比p少前进一次,即r指向p前一格
p=p->next;
}
q=s=t;//q是排序后新链表的头
if(u!=0)u->next=t->next;//原链表t处断开
else
head=t->next;
p=head;
while(p!=0)
{
//同上,找出score最大的那个链
u=0;
t=head;
while(p->next!=0)
{
if(p->next->score>t->score)
{
t=p->next;
u=p;
}
//
if(p!=head)r=r->next;
p=p->next;
}
s->next=t;//把找出的score最大的链接到新链表后
s=s->next;
if(u!=0)u->next=t->next;//原链表t处断开
else
head=t->next;
//
t=head;
p=head;
//
r=head;
}
s->next=0;//新链表的结束标记
head=q;//head指向排序后链表的头
}