1 public class Program
2 {
3 static void Main(string[] args)
4 {
5 GetLastOne(2, 6);
6 Console.ReadKey();
7 }
8
9
10 static void GetLastOne(int m, int n)
11 {
12 //构造循环单向链表
13 var firstNode = new Node(1);
14 var tmpNode = firstNode;
15 for (int i = 2; i <= n; i++)
16 {
17 var next = new Node(i);
18 tmpNode.Next = next;
19 tmpNode = next;
20 }
21 tmpNode.Next = firstNode;
22
23 while (firstNode != firstNode.Next)
24 {
25 //获取自杀节点前一位N1
26 var n1 = firstNode;
27 for (int i = 1; i < m-1; i++)
28 {
29 n1 = n1.Next;
30 }
31 //自杀节点
32 var killNode = n1.Next;
33 Console.WriteLine($"死亡:{killNode.Position}");
34 //移除自杀节点
35 n1.Next = n1.Next.Next;
36 firstNode = n1.Next;
37 }
38 Console.WriteLine($"幸存:{firstNode.Position}");
39 }
40 }
41
42 class Node
43 {
44 public int Position;
45 public Node Next;
46
47 public Node(int position)
48 {
49 Position = position;
50 }
51 }