这是我用于检测链表中循环的代码:
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");
有没有办法摆脱循环内的代码重复?
我是否正确地假设在使乌龟向前迈出一步后我不需要检查?在我看来,乌龟永远不会在兔子之前到达列表的末尾(与寓言相反)。
还有其他方法可以简化/美化此代码吗?