一种算法来确定一个 FORKED 列表是否是循环的

问题描述

分叉列表是一种链表,其中存在一个节点(至少)具有两个“next”,next1 和 next2。即,每个节点由 3 个属性组成 - value、next1 和 next2。对于除了至少一个节点之外的每个节点,next2 可能是 None。 我正在寻找一种将分叉列表作为输入的算法,如果列表中有圆圈,则返回 True,否则返回 False。 附言我们可以假设列表的开始和结束就像一个普通的链表(只有一个 next),并且有 2 个“next”的节点是内部节点之一。

解决方法

将“分叉树”视为有向图并在图中寻找电路,例如Johnson's algorithm

,

将“分叉树”视为一组从一个项目到直接链接的下一个项目的依赖项Topological sort 项将通过检测任何循环而失败。