以下是我的代码,用于检测链接列表中的周期:

do
{
    hare = hare.next();
    if (hare == back) return;

    hare = hare.next();
    if (hare == back) return;

    tortoise = tortoise.next();
}
while (tortoise != hare);
throw new AssertionError("cyclic linkage");

有没有办法消除循环中的代码重复?
让乌龟向前迈一步后,我假设不需要检查,这是对的吗在我看来,乌龟永远无法在兔子之前到达列表的末尾(与寓言相反)。
还有其他方法可以简化/美化这个代码吗?

最佳答案

有办法把代码去掉吗
循环内重复?
怎么样:

for(int i = 0; i < 2; i++)
{
    hare = hare.next();
    if (hare == back) return;
}

 tortoise = tortoise.next();

无论如何,这并不是一个巨大的进步。
让乌龟向前迈一步后,我假设不需要检查,这是对的吗?
是的,正如你正确的推理,乌龟总是在兔子移动之前就在兔子后面;所以乌龟总是在覆盖之前覆盖过的地面。
如果数据结构在比赛中因为任何原因发生了变化,那么这当然不再是真的(但是如果是这样,你会遇到更大的问题)。
任何其他简化/美化的方法
这个密码?
我想不出来。

10-08 00:45