typedef struct Node { int num; struct Node *next; }Node; //总共有N个人,从第s个人开始数起,数到第M个将其踢出 void fun(int N, int s, int m) { Node * head = 0, *p =0, *pre=0; //建立循环链表 for(int i=0; i<N; i++) { if(i==0) { head =(Node *) malloc(sizeof(Node)); pre = head; head->num = i+1; head->next = 0; } else { pre->next = (Node *) malloc(sizeof(Node)); pre->next->num = i+1; pre->next->next = 0; pre = pre->next; } } pre->next = head; //找到第s个人 p = head; int i=1; while(i<s) { p = p->next; i++; } //开始淘汰 int left = N;//剩下的人数 int j=1; //计数 while(left>0) { if(j==m) { //踢出该人,将链表连接好,释放内存 printf("%d/t",p->num); j=1; left--; pre->next = p->next; Node * tmp; tmp = p; free(p); p = tmp->next; } else { //否则往下遍历 j++; pre = p; p = p->next; } } printf("/n"); }