#include <stdafx.h> #include <stdlib.h> struct number { int num; struct number * next; }; void main () { int m, n; struct number * p, * head=NULL, * tail; printf("please input M and N:\n"); scanf("%d %d", &m, &n); //输入M、N值。 for (int i=1; i<=n; i++) //建立循环链表。 { p=(struct number *)malloc(sizeof(struct number)); p->num=i; if(head==NULL){ head=p; tail=p;//注意开始tail也要赋值 } else tail->next=p; tail=p; } tail->next=head; p = tail; //从head开始,记录开始的前一个指针 while(n--) //剩下的数的个数为n { int t = m%n; //防止多数太多圈造成时间浪费 for(int j=1; j<t;j++ ) //数到要删的那个数的前一个 p=p->next; number *q = p->next; //要删的数的指针 printf("%d ", q->num); //输出要删的数 p->next = q->next; //要删的数从链表中去掉 free(q); } printf("\n"); }
C语言/约瑟夫环问题
最新推荐文章于 2022-09-28 18:26:51 发布