法一:修改指针指向
//法二
void maopao_link(link_p H){
if(H==NULL){
printf("头节点为空\n");
return;
}
if(link_empty(H)){
printf("链表为空\n");
return;
}
link_p tail=NULL;
while(H->next->next!=tail){
link_p p=H;
link_p q=H->next;
while(q->next!=tail){
if((q->data)>(q->next->data)){
p->next=q->next;
q->next=q->next->next;
p->next->next=q;
q=p->next;
}
q=q->next;
p=p->next;
}
tail=q;//每轮循环确定一个最大的元素放在最后,然后就不用比了
//每轮都可以少比一个
}
}
法二:交换数值,不修改指针
void maopao_data(link_p H){
if(H==NULL){
printf("头节点为空\n");
return;
}
if(link_empty(H)){
printf("链表为空\n");
return;
}
int temp;
for(int i=0;i<H->len;i++){
link_p p=H->next;
for(int j=0;j<H->len-i;j++){
if(p->data>p->next->data){
temp=p->data;
p->data=p->next->data;
p->next->data=temp;
}
p=p->next;
}
}
}