typedef struct lnode
{
int data;
struct lnode * next;
int length;
}sqlist,*linklist;
linklist createlinklist()
{
int n;
linklist head = NULL;
linklist s, r;
int i;
r = head;
printf("请输入丢手帕的小朋友的个数/n");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
s= (linklist)malloc(sizeof(sqlist));
s->data = i;
s->next = NULL;
if(head == NULL)
head = s;//头结点
else
r->next = s;
r = s;
}
r->next = head;
return head;//返回首指针
}
void yusefu(linklist head)
{
linklist p,s;
p = head;
int k;//开始报数的位
int m;//到步长的人出列
int n = 1;//控制次数
int i,j;
printf("请输入第一个丢手帕的人的位置");
scanf("%d",&k);
printf("请输入步长");
scanf("%d",&m);
for(i=1;i<k;i++)
{
p = p->next;//遍历开始计数结点
}
while(p->next!=p)//剩余一个节点
{
for(j=0;j<m;j++)//m进行控制
{
s= p;
p = p->next;
}
s->next = p->next;//移出节点
printf("/n丢手帕第%d次 %4d踢出/n",n,p->data);
free(p);
p->next = NULL;//防止野指针的出现
p = s->next;//p从删除的元素下一个开始
n++;
}
printf("余下小朋友为 %4d",p->data);
}
void main()
{
linklist p;
p = createlinklist();
yusefu(p);
}