基础数据结构——循环链表

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 typedef struct Node
 4 {
 5     int data;
 6     struct Node *next;
 7 }CLNode;
 8 void DeleCL(CLNode *lhead, int m)
 9 {
10     int i = 1;
11     CLNode *p = lhead;
12     CLNode *q = lhead;
13     while (p != NULL)
14     {
15         if (i == m)
16         {
17             q->next = p->next;
18             free(p);
19             p = q->next;
20             i = 1;
21         }
22         q = p;
23         p = p->next;
24         if (q == p)
25         {
26             printf("%d\n", p->data);
27             break;
28         }
29         i++;
30     }
31 }
32 int main(void)
33 {
34     int n, m;
35     while (scanf("%d%d", &n, &m) != EOF)
36     {
37         CLNode *head = NULL;
38         CLNode *r;
39         CLNode *p;
40         r = (CLNode *)malloc(sizeof(CLNode));
41         r->data = 1;
42         head = r;
43         for (int i=2; i<=n; i++)
44         {
45             p = (CLNode *)malloc(sizeof(CLNode));
46             p->data = i;
47             r->next = p;
48             r = p;
49         }
50         r->next = head;
51         DeleCL(head, m);
52     }
53     return 0;
54 }

 

Description

n个人想玩残酷的死亡游戏,游戏规则如下: 

 

n个人进行编号,分别从1到n,排成一个圈,顺时针从1开始数到m,数到m的人被杀,剩下的人继续游戏,活到最后的一个人是胜利者。

 

请输出最后一个人的编号。

Input

输入n和m值。m>1。

Output

输出胜利者的编号。

Sample Input
5 3
 
Sample Output
4
posted @ 2012-11-12 18:42  尔滨之夏  阅读(269)  评论(0编辑  收藏  举报