今天做链表排序有个误区,就是以为交换的时候要连next节点也交换,还要固定head节点,想了很久也没做出来,但是后来看网上的提示,才知道只要交换节点内的数据就可以了,根本不用交换next节点
#include <stdio.h> #include <stdlib.h> struct node { int data; struct node *next; }; struct node *create_list(int a[],int len) { struct node *phead; struct node *ptr; struct node *pre; phead=(struct node *)malloc(sizeof(struct node)); int i=0; phead->data=a[i]; phead->next=NULL; ptr=phead->next; pre=phead; for(i=1;i<len;i++) { ptr=(struct node *)malloc(sizeof(struct node)); ptr->data=a[i]; ptr->next=NULL; pre->next=ptr; ptr=ptr->next; pre=pre->next; } return phead; } void print_list(struct node *phead) { struct node *ptr=phead; while(ptr != NULL) { printf("%d ",ptr->data); ptr=ptr->next; } printf("\n"); } struct node *bubble(struct node *phead,int len) { struct node *ptr,*next; int temp; for(int i=0;i<len;i++) { ptr=phead; next=ptr->next; for(int j=len-i-1;j>0;j--) { if(ptr->data > next->data) { temp=ptr->data; ptr->data=next->data; next->data=temp; } ptr=ptr->next; next=next->next; } } return phead; } int main() { int a[10]={ 5,3,6,8,9,6,5,4,2,7 }; struct node *phead; phead=create_list(a,10); print_list(phead); phead=bubble(phead,10); print_list(phead); }