#include <stdio.h>
#include <stdlib.h>
typedef struct linklist //定义链表节点类型
{
int data;
struct linklist *next;
}linklist;
int main(void)
{
int i,n,k,m,total;
linklist *head,*p,*s,*q;
printf("猴子总数:");
scanf("%d",&n);
head = (linklist*)malloc(sizeof(linklist));
p = head;
p->data = 1;
p->next = p; //初始化循环链表
for(i=2; i<=n; ++i)
{
s = (linklist*)malloc(sizeof(linklist));
s->data = i;
s->next = p->next;
p->next = s;
p = p->next; //移到下一个点
}
p = head;
q = head;
total = n;
while(total != 1)
{
for(i=1; i<3; ++i)
{
p = p->next;
}
printf("[%d] out\n",p->data);//打印要删除的结点
while(q->next != p)
{
q = q->next;
}
s = p; //保存要删除的结点
q->next = p->next; //删除结点
p = p->next;
free(s);
total--;
}
printf("猴王是第[%d]只\n",p->data);
return 0;
}