有n个人围成一圈,从第1个人开始报数1、2、3,每报到3的人退出圈子。编程使用链表找出最后留下的人。
大神帮忙找一下为什么输出不正确(删除节点,可是好像没起作用)#include "stdio.h"
#include "malloc.h"
#define LEN sizeof(struct DATA)
struct DATA
{
int score;
int numb;
struct DATA *next;
};
struct DATA *create(int n)
{
struct DATA *head=NULL,*p1=NULL,*p2=NULL;
int i;
for(i=1;i<=n;i++)
{
p1=(struct DATA *)malloc(LEN);
p1->numb=i;
p1->next=NULL;
if(i==1)
head=p1;
else
p2->next=p1;
p2=p1;
}
p2->next=head;
return(head);
}
main()
{
struct DATA *head,*p1,*p2;
int n,i=1,num=1;
scanf("%d",&n);
head=create(n);
p1=head;
while(n!=1)
{
p2=p1;
p1=p1->next;
p1->score=num;
num++;
if(p1->score==3*i)
p1=p1->next,p1->score=num,num++,p2->next=p1,i++,n--;
}
printf("%d",head->next->numb);
}