第四次博客:循环单链表解决约瑟夫环问题
#include <stdio.h>
#include <stdlib.h>
typedef struct aa{
int data;
struct aa *next;
}Link;
int n;
Link * CreateLink(Link *L){
Link *p,*q;
int i;
printf("请输入人数:");
scanf("%d",&n);
for(i=1;i<=n;i++){
if(i==1){
L=p=(Link *)malloc(sizeof(Link));
L->data=i;
}
else
{
q=(Link *)malloc(sizeof(Link));
q->data=i;
p->next=q;
p=q;
}
}
p->next=L;
return L;
}
int DeleteLink(Link *L){
int x;
Link *p,*q;
int k=1,i=1;
printf("请输入要报的数:");
scanf("%d",&x);
q=L;
while(n>1){
k++;
p=q;
q=q->next;
if(k==x){
p->next=q->next;
printf("第%d次报数,淘汰的数:%d\n",i,q->data);
free(q);
k=1;
q=p->next;
n--;
i++;
}
}
return p->data;
}
int main(){
Link *L,*p;
int x;
L=CreateLink(L);
for(p=L,x=0;p!=NULL,x<n;x++,p=p->next)
printf("%d ",p->data);
x=DeleteLink(L);
printf("最后留下的数是%d",x);
}
浙公网安备 33010602011771号