大N的好链接列表

时间:2014-09-26 14:14:00

标签: algorithm data-structures linked-list josephus

如果我们有一个循环链表,那么:

enter image description here

和代码:

Int SO(LIST *L)
{
  While (L->next != L){
       L->next=L->next->next;
        L=L->next;
                       }

   return L->Data;

}

我想计算上述代码的输出,n = 729,n = 2200?

我认为这正是http://en.wikipedia.org/wiki/Josephus_problem问题。我应该如何计算输出以及输出是什么。

谁能帮帮我?

1 个答案:

答案 0 :(得分:0)

如果我正确理解了这个问题,这就是一个众所周知的谜题的概括。

在链接列表的每次遍历中,删除一半元素。所以想想当n是2的幂时的情况。

在这种情况下,永远不会删除第一个节点,答案将为1.

因此,在第一次遍历中,每次删除后,只需检查剩余的节点数。如果剩余的节点数是2的幂,则当前的L数据应该是答案。