1 #include<stdio.h>
2 #include<stdlib.h>
3 typedef struct LNode
4 {
5 int code,number;
6 struct LNode * next;
7 }LNode,* LinkList;
8 int Insert_L(LinkList L)
9 {
10 int n;
11 LNode * s,* p;
12 printf("Please Input the number:\n"); //输入参与人数n;
13 scanf("%d",& n);
14 printf("Please Input the code:\n");
15 scanf("%d",& L->code);
16 p=L; //指针P指向L表头;
17 n=n-1;
18 for(;n>0;n--)
19 {
20 s=(LNode * )malloc(sizeof(LNode)); //指针s指向开辟的新空间;
21 printf("Please Input the code:\n");
22 scanf("%d",& s->code); //输入密码;
23 s->number=p->number+1;
24 s->next=p->next;
25 p->next=s;
26 p=s;
27 }
28 return 0;
29 }
30 int Getnumber_L(LinkList L,int m)
31 {
32 LNode * q,* p;
33 int i;
34 p=L;
35 while(p->next!=p)
36 { // 人数至少为2时;
37 i=1;
38 while(i!=m) //找到第m个人;
39 {
40 p=p->next; //P指针指向下一个;
41 i++;
42 }
43 printf("%d ",p->number); //输出第m个人的编号;
44 m=p->code; //得到第m个人的密码(即下一个人的编号);
45 p->code=p->next->code; //将p的后驱的信息赋给p指针;
46 p->number=p->next->number; //同上;
47 q=p->next; //暂时将p的后驱赋给q;
48 p->next=p->next->next; //将p的后驱的后驱赋给p的后驱;
49 free(q); //释放q指针;
50 }
51 printf("%d\n",p->number); //输出最后一个人的编号;
52 return 1;
53 }
54 int main()
55 {
56 int m,n;
57 LinkList L,s,p;
58 if(!(L=(LinkList)malloc(sizeof(LNode)))) //L表为空;
59 exit(0);
60 L->number=1;
61 L->next=L;
62 L->code=0;
63 Insert_L( L);
64 printf("Please Input The First Number:\n");
65 scanf("%d",&m);
66 Getnumber_L(L,m);
67 return 0;
68 }
![]()