69,373
社区成员
发帖
与我相关
我的任务
分享
void sortlist(linklist * head)
{
linklist * newhead, * s, * pre ,* p;
p=head->next;
newhead=p->next;
p->next=NULL; ----1
while(newhead)
{
s=newhead;
newhead=newhead->next;
pre=head;
p=head->next;
while(p!=NULL && p->data < s->data) -----2
{
pre=p;
p=p->next;
}
s->next=p;
pre->next=s;
}
}
void sortlist(linklist * head)
{//head->|3|->|2|->|1|->NULL
linklist * newhead, * s, * pre ,* p;
p=head->next;//p =>3
newhead=p->next;//newhead=>2
p->next=NULL; //head->|p|->NULL,它将成为最后一个结点。故为结点
while(newhead)
{
s=newhead;//s=>2
newhead=newhead->next;//newhead=>1
pre=head;
p=head->next;
while(p!=NULL && p->data < s->data)//p判断是否NULL,因为从头往后逐个遍历的,必须保证循环结束
{//此循环是寻找插入位置
pre=p;//保留要插入位置的前一个结点指针,为了后文插入
p=p->next;
}
s->next=p;
pre->next=s;
}
}