【发布时间】:2011-03-17 15:56:48
【问题描述】:
这是我在链表中检测循环的代码:
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");
有没有办法摆脱循环内的代码重复?
在让乌龟向前迈出一步后,我是否认为我不需要检查是正确的?在我看来,乌龟永远不会在兔子之前到达列表的末尾(与寓言相反)。
还有其他方法可以简化/美化这段代码吗?
【问题讨论】:
-
如果您设计
back来引用具有指向其自身的“下一个”字段的节点,那么您可以将4 行替换为hare = hare.next().next(); if (hare==back) return;。不过,不知道我是否可以更改列表。 -
@Steve:
back可以直接引用自己(已经是哨兵了)。
标签: algorithm linked-list code-duplication control-flow