java - 关于使用数组表示约瑟夫斯谜题

标签 java c++ c algorithm josephus

Robert Sedwick 的算法,提到链表可以用数组表示,链接如下

http://flylib.com/books/en/3.55.1.34/1/

图 3.8,这里如果从我的理解中删除了 5,接下来 4 应该更改为索引 6,因为删除了 val 5,因为我们遍历了第 4 项的数字,接下来更改了 val 3。我没有遵循图中的逻辑。任何人都可以帮助我吗?

谢谢!

最佳答案

索引是从零开始的,而不是值本身(字母会是更好的值)。
移除值5示例:移除前,值为4的节点的下一个索引为4,指向值5;删除后,下一个索引更改为 5,指向值 6(下一个从 4 更改为 5)。

或者,使用前缀 v 来表示值:

之前

    index ...  3  4  5 ...
    ----------------------
    value     v4 v5 v6
    next       4  5  6

之后

    index ...  3  4  5 ...
    ----------------------
    value     v4 v5 v6
    next       5  5  6  

如您所见,节点 v4 后跟 v6(索引 5)实际上从链中删除了 v5

关于java - 关于使用数组表示约瑟夫斯谜题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4296180/

相关文章:

java - 如何在读取java源文件时查找变量的类型

java - 为什么 List<String>.toArray() 返回 Object[] 而不是 String[]?如何解决这个问题?

java - 比利时荷兰语的正确货币格式是什么?

c++ - static_cast 可以用于位字段吗?

c++ - 确定结构是否具有特定类型的成员

c - 在 C 中打印 boolean 结果

java - 柏林噪声的输出范围

c++ - 如何为库PCRE2生成单个 header ?

c++ - 解释c中的头文件路径

c++ - 仅当达到虚拟限制时内存不足?