约瑟夫环

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

题目: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;
            }
        }
        /// <summary>
        /// 循环单链表初始化
        /// </summary>
        /// <param name="listNodeLength">链表长度</param>
        /// <returns></returns>
        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;
        }
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容