约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的顺序是:5,4,6,2,3,1。(此处取自百度百科)
用单链表模拟让计算机运行告诉结果
编程思想,建立N个节点的循环链表,每个节点都可以是Boolean true,每经过M-1个true节点就将第M个节点设为false,直到只剩最后一个true节点(判断为p.next=p),该节点即为幸存。(遍历时由于所有节点一直存在,因此时间复杂度会较高)
或者每经过M-1个节点就释放第M个节点,直到剩下最后一个节点。(每次遍历会少不少节点,因此时间复杂度会较低)