Menu
CoddyTech

Linked List Cycle

链表存储在数组 next 中:节点 i 指向节点 next[i],-1 表示链表在此处结束。头节点是节点 0。从头节点开始沿着链接前进,如果你回到访问过的节点,就返回 true;如果到达链表末尾,就返回 false。遍历过程中无法到达的节点不算,即使它们彼此相连形成循环也不算。

函数

hasCycle(next: integer-array) → boolean
nextinteger-array
每个节点的链接:next[i] 是节点 i 后面的节点,或者是 -1
返回值boolean
如果从节点 0 开始遍历时再次访问某个节点,则为 true;如果到达 -1,则为 false

约束条件

  • 1 ≤ next.length ≤ 104
  • -1 ≤ next[i] ≤ next.length-1
  • 多个节点可能链接到同一个节点,而且有些节点可能无法从头节点到达。

示例

输入
next = [1, 2, 3, 1]
输出
true
解释
遍历顺序是 0、1、2、3,然后又回到 1。节点 1 被访问了两次,因此这个列表在节点 1、2 和 3 之间形成了一个循环。
challenge icon

进阶

你还能在额外内存为 O(1) 的情况下,找到环开始的节点吗?

重置代码
def hasCycle(next):
    # 在这里编写代码

测试 #1

测试 #2

测试 #3

参数

next = [1, 2, 3, 1]

预期输出

true