#include
#include
typedef struct node
{
int data;
struct node *next;
}node;
node *create(int n)
{
node *p=NULL,*head;
head=(node*)malloc(sizeof(node));
p=head;
node *s;
int i=1;
if(n!=0)
{
while(i<=n)
{
s=(node *)malloc(sizeof(node));
s->data=i++;
p->next=s;
p=s;
}
s->next=head->next; //创建一个无头结点单循环链表
}
free(head);
return s->next;
}
int main()
{
int n=41;
int m=3;
int i;
node *p=create(n);
node *temp;
m%=n;//等价于 m=m%n,m比n小取余也是m
printf("依次出列的序号为:\n");
while(p!=p->next)
{
for(i=1;i{
p=p->next;
}
printf("%d ",p->next->data); //输出第3个数
temp=p->next;
p->next=temp->next; //从链表中释放被删除的结点
free(temp);
p=p->next;//结点p移至下一轮的1
}
printf("\n最后留下的人的序号是:");
printf("%d\n",p->data);
return 0;
}
/*程序的代码没有什么问题,可能是你看不懂吧,再者就是输出不好看,我改了一下,应该清晰
*多了
*/