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 }

猜你喜欢

转载自www.cnblogs.com/bboykaku/p/12524378.html
今日推荐