约瑟夫问题之单链表循环
#include <stdio.h>
#include <malloc.h>
typedef struct node
{ int data;
struct node *next;
}NODE;
NODE *create()
{ NODE *head,*p,*q;
int n,i;
head=(NODE*)malloc(sizeof(NODE));
q=head;
q->data=1;
printf("请输入人数");
scanf("%d",&n);
if(n>0)
{ for(i=2;i<=n;i++)
{ p=(NODE*)malloc(sizeof(NODE));
p->data=i;
q->next=p;
q=p;
}
}
q->next=head;
return head;
}
int del(NODE *head,int loc,int j)
{ NODE *t1,*t2;
int k,i=1;
t1=head;
for(k=1;k<loc-1;k++)
t1=t1->next;
if(t1->next==t1)
{ printf("输入位置有误");
return 0;
}
while(t1->next!=t1)
{ t2=t1->next;
for(k=1;k<j;k++)
{ t1=t1->next;
t2=t2->next;
}
t1->next=t2->next;
printf("第%d出局人为第 %d 号\n",i,t2->data);
i++;
free(t2);
}
printf("第%d出局人为第 %d 号\n",i,t1->data);
}
main()
{ NODE *l1;
int loc,j;
l1=create();
printf("请输入从第几个人开始\n");
scanf("%d",&loc);
printf("请输入报数为是多少\n");
scanf("%d",&j);
del(l1,loc,j);
}