C#循环链表 约瑟夫问题

 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     }

猜你喜欢

转载自www.cnblogs.com/TeemoHQ/p/10900991.html