解决约索夫环问题的思想是：假设有n个元素, 从1开始计算到第d个时第d个将被删除, 再从d+1开始计算, 继续计算下去到2d时又删除一个, 继续这个过程, ..., 直到剩下一个元素为止。

约索夫环问题用双向循环链表解决的时间复杂度是O((n-1)*d)= O(n*d), 因为，第一次指针前移d个位置, 第二次还是前移d个位置, ..., 直到最后剩下两个节点时仍旧循环前移d个位置, 剩下一个节点时结束。指针共走了(n-1)*d步。

用数组解决约索夫环问题的时间复杂度是O((n-1)*d*(d-1)/2) = O(n*d*d), 用数组计算时是否真正删除元素依赖于n和d值的相对大小。在数组中间某位置删除一个元素的时间复杂度O(n*n), 但是删除元素却可以减少以后的搜索长度。不删除元素(可用一个特殊值标记)时, 最坏情况下需要走的长度为：d + (d+1) + (d+2) + ... + (n-3)*d + (n-2)*d = (n-1)*d*(d-1)/2步。删除元素时, 每删除一个元素后面所有的元素都需要向前移动一个元素的位置, 删除n-1个元素平均的时间复杂度为O(n*n), 由于移动, 平均需要复制元素次数大约为(1 + n/2)*(n-1), 此外需要向前走(n-1)*d步, 总的时间复杂度为O(n*(n+d))。有此可见, 用数组解决约索夫环问题时, 当n远远大于d时采用非删除元素的策略较为合适, 当d相对较大时, 采用删除元素的策略较为合适。

很明显, n和d都比较大时, 可以测试一下, 使用链表解决约索夫环问题比使用数组的运行速度明应该显著快一些。