我有一系列含义:
a -> b
b -> c
c -> d
d -> f
有时会出现循环。例如:
a -> b
b -> c
c -> d
d -> c
我将这些含义表示为连接列表:
a -> b
b -> c
c -> d
d -> c
a point to b, b point to c, c point to d, d point to c.
让我们将“i”称为包含循环开始的元素的列表的节点,我想将列表的第一部分从第一个元素复制到元素i-1到数组。
我正在使用java,是否有可能解决这个问题?
答案 0 :(得分:0)
我对这个问题的最终结局有点不清楚。我看到以下两部分。
第1部分。是否存在循环?
第2部分。循环从哪里开始?
对第1部分的回答。要检查是否存在循环,请在列表的开头添加2个指针,slow
和fast
。一般的想法,
while (fast != null && fast.next != null):
fast = fast.next.next;
slow = slow.next;
if fast is equal to slow:
there is a cycle
对第2部分的回答。如果有一个循环,它从哪里开始?一般的想法是将slow
指针移回列表的开头。让fast
指针成为两者相遇的地方。逐步增加直到他们相遇。这将是周期的开始。试试看。 :)