链表的排序
1.不拆分链表,直接替换链表的数据
int list_sort(linklist H){
linklist p,q;
data_t value;
if (H == NULL){
printf("H is NULL\r");
return -1;
}
if(H->next == NULL || H->next->next == NULL){
return 0;
}
p = H->next;
for(p; p != NULL; p = p->next){
for(q = p->next; q!= NULL; q= q->next){
if(p->data > q->data){
value = p->data;
p->data = q->data;
q->data = value;
}
}
}
return 0;
}
2.直接插入排序,思路将头结点位置一分为二,进行判断,然后进行插入![在这里插入图片描述](https://img-blog.csdnimg.cn/b0ccd5a4a14b4d57bedf6fad3d05043e.png#pic_center)
int list_sort(linklist H){
linklist p,q,r;
int t;
if(H == NULL){
printf("H is NULL");
return -1;
}
p = H->next;
H->next = NULL;
r = H;
while(p != NULL)
{
q = p;
p = p->next;
r = H;
while(r->next && r->next->data < q->data)
r = r->next;
q->next = r->next;
r->next = q;
}
return 0;
}