这问题在那里啊
#include<stdio.h>
#include<malloc.h>
struct node
{ int data;
struct node *next;
};
struct node *createlink(int n)
{struct node *r,*q,*p;
int i,a;
p=(struct node *)malloc(sizeof(struct node));
scanf("%d",&a);
p->data=a;
r=q=p;
for(i=0;i<n-1;i++)
{q=(struct node *)malloc(sizeof(struct node));
scanf("%d",&a);
q->data=a;
p->next=q;
p=q;
}
q->next=r;
return r;
}
main()
{ struct node *r,*q,*p;
int n,m,j;
scanf("%d",&n);
r=createlink(n);
scanf("%d",&m);
while(r->next!=r)
{ for(j=0;j<m-1;j++)
{r=r->next;
p=r->next;
printf("->%d",p->data);
r->next=p->next;
r++;}
}
if(r->next==r)
printf("->%d",r->data);
}
让n个人坐成一圈报数 报到m的就退出 输出出列的顺序
----------------解决方案--------------------------------------------------------
除了下面红色部分,还需要注意释放内存
#include<stdio.h>
#include<malloc.h>
struct node
{ int data;
struct node *next;
};
struct node *createlink(int n)
{struct node *r,*q,*p;
int i,a=1;
p=(struct node *)malloc(sizeof(struct node));
//scanf("%d",&a);
p->data=a;
r=q=p;
for(i=0;i<n-1;i++)
{q=(struct node *)malloc(sizeof(struct node));
a++;
q->data=a;
p->next=q;
p=q;
}
q->next=r;
return r;
}
main()
{ struct node *r,*q,*p;
int n,m,j;
scanf("%d",&n);
r=createlink(n);
scanf("%d",&m);
while(r->next!=r)
{ for(j=0;j<m-1;j++)
{r=r->next;
p=r->next;
printf("->%d",p->data);
r->next=p->next;
r=r->next;}
}
if(r->next==r)
printf("->%d",r->data);
}
----------------解决方案--------------------------------------------------------