约瑟夫环

    面试遇到的没写出来....后来发现超简单,当时数据结构课玩手机了╭(╯^╰)╮

题目:100名学生围成一个圈, 编号从1到100,从第一名学生开始报数,从1-9报数 每报出9就退出,直到所有学生退出, 问各个学生出圈顺序

采用循环单链表解决,代码如下:

    class Program
    {
        static void Main(string[] args)
        {
            ListNode listNode = ListNodeInit(100);
            ysfh(listNode);

            Console.Read();
        }
        private static void ysfh(ListNode headNode)
        {
            while (headNode != null && headNode.next != headNode)
            {
                ListNode temp = null;
                for (int i = 0; i < 9; i++)
                {
                    if (temp == null)
                    {
                        temp = headNode;
                    }
                    else
                    {
                        temp = temp.next;
                    }

                }
                Console.WriteLine(temp.value + "出局");
                headNode = temp;
                headNode.value = headNode.next.value;
                headNode.next = headNode.next.next;
            }
        }
        /// 
        /// 循环单链表初始化
        /// 
        /// 链表长度
        /// 
        public static ListNode ListNodeInit(int listNodeLength)
        {
            ListNode listNode = new ListNode(0);
            ListNode copyListNode = listNode;
            for (int i = 1; i < listNodeLength; i++)
            {
                ListNode lnTemp = new ListNode(i);
                listNode.next = lnTemp;
                listNode = lnTemp;
            }
            listNode.next = copyListNode;
            return copyListNode;
        }
    }
    public class ListNode
    {
        public int value;
        public ListNode next;
        public ListNode(int _value)
        {
            value = _value;
        }
    }

你可能感兴趣的:(约瑟夫环)