create 函数用传指针方式没法创建链表?
1 //create 函数用传指针方式没法创建链表? 2 3 #include<stdio.h> 4 #include<stdlib.h> 5 struct Person 6 { 7 int num; 8 struct Person *next; 9 }; 10 11 int main() 12 { 13 struct Person* p=NULL; 14 int n,m; 15 scanf("%d%d",&n,&m); 16 void create(struct Person*,int); //用 struct Person* create(int);就可以 17 int Yue(struct Person*,int,int); 18 create(p,n); //改为p=create(n);就可以 19 printf("%d\n",Yue(p,n,m)); 20 return 0; 21 } 22 23 void create(struct Person* p,int n) //问题:为什么这种方式不能成功创建新链表? 24 { 25 struct Person *p1,*p2; //改为:struct Person *head,*p1,*p2; 26 p1=(struct Person *)malloc(sizeof(Person)); 27 int i=0; 28 while(i<n) 29 { 30 i++; 31 p1->num=i; 32 if(i==1) p=p2=p1; //改为:if(i==1) head=p2=p1; 33 else 34 { 35 p2->next=p1; 36 p2=p1; 37 } 38 p1=(struct Person *)malloc(sizeof(Person)); 39 } 40 p2->next=NULL; 41 free(p1); 42 p1=NULL; 43 //加一行:return head; 44 } 45 46 int Yue(struct Person* p,int n,int m) 47 { 48 int i=0,j=1,k=0; 49 struct Person *q,*r; 50 q=r=p; 51 while(k<n-1) 52 { 53 i++; 54 j++; 55 56 if(i!=1) r=r->next; 57 if(r==NULL) r=p; 58 59 q=q->next; 60 if(q==NULL) q=p; 61 62 if(j==m) 63 { 64 j=1; 65 k++; 66 if(q==p) 67 { 68 p=p->next; 69 q->next=NULL; 70 free(q); 71 q=p; 72 } 73 else if(q->next==NULL) 74 { 75 r->next=NULL; 76 free(q); 77 q=p; 78 } 79 else 80 { 81 r->next=q->next; 82 free(q); 83 q=r->next; 84 } 85 } 86 } 87 return q->num; 88 }