1 #include <stdlib.h>
2
3 typedef struct node* link;
4 struct node {
5 int item;
6 link next;
7 };
8
9 void main(int argc, char* argv[]){
10 int i;
11 int N = atoi(argv[1]);
12 int M = atoi(argv[2]);
13 link t = malloc(sizeof *t);
14 link e = malloc(sizeof *e);
15 t->item = 1;
16 t->next = t;
17 e = t;// e为最后一个节点
18 for(i = 2; i<= N; i++){
19 link x = malloc(sizeof *e);
20 x->item = i;
21 x->next = e->next;// 把原来最后一个节点的next给新的最后的节点
22 e->next = x;// 把新的节点加入原来节点后
23 e = x;// 新的节点变成新的最后一个节点了
24 }
25 while(N-- > 0){
26 printf("%d\n", t->item);
27 t = t->next;
28 }
29 while ( t != t->next){
30 for(i = 1; i < (M - 1); i++){
31 t= t->next;
32 }// 找出第M个的前一个
33 printf("%d\n", t->next->item);
34 // 注意下面两步不能写成t=t->next->next; 那样的话没有形成新的闭合循环
35 t->next = t->next->next;// 把第M个去掉
36 t = t->next; // 以M的下一个为新的起点
37 }
38 }