大神,帮我看看我的代码问题出在哪。有n个人围成一圈,从第1个人开始报数1、2、3,每报到3的人退出圈子。编程使用链表找出最后留下的人。
大神,帮我看看我的代码问题出在哪。有n个人围成一圈,从第1个人开始报数1、2、3,每报到3的人退出圈子。编程使用链表找出最后留下的人。
我输入一个数,但总没有东西输出。
#include "stdio.h"
#include "stdlib.h"
struct person {
int num;
struct person *next;
};
struct person *creat(int n)//P>=1
{
struct person *head=NULL,*p1=NULL,*p2=NULL;
int i;
for(i=1;i<=n;i++)
{ p1=(struct person *)malloc(LEN);
p1->num=i;
p1->next=NULL;
if(i==1) head=p1;
else p2->next=p1;
p2=p1;
}
return(head);
}
struct person *del(struct person *head)
{
struct person *p1=head,*p2=head,*rm,*s=head;
int k=1;
while(p1->next!=p1)
{
while(s->next!=NULL)//让链表首尾相连
{
s=s->next;
}
s->next=head;
if(k==3)
{
rm=p1;
p1=p1->next;
p2->next=p1;
free(rm);
rm=NULL;
k=0;
} else {
p2=p1;
p1=p1->next;
}
k++;
}
p1->next=NULL;
return(p1);
}
int main()
{
struct person *pt,*p;
int n;
scanf("%d",&n);
pt=creat(n);
p=del(pt);
printf("%d",p->num);
return 0;
}