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 }
C#循环链表 约瑟夫问题
猜你喜欢
转载自www.cnblogs.com/TeemoHQ/p/10900991.html
今日推荐
周排行