跳到主要内容

简述 Java 链表判环 ?

参考答案:

在Java中,链表判环通常指的是判断一个链表是否存在环,即链表中是否存在某个节点,使得从这个节点出发可以回到自己。这通常可以通过两种方法来实现:

  1. 遍历法

    • 从头节点开始,依次遍历单链表中的每一个节点。
    • 每遍历一个新节点,就从头检查新节点之前的所有节点,用新节点和此节点之前所有节点依次做比较。
    • 如果发现新节点和之前的某个节点相同,则说明该节点被遍历过两次,链表有环。
    • 如果之前的所有节点中不存在与新节点相同的节点,就继续遍历下一个新节点,并重复上述操作。
    • 这种方法的时间复杂度是O(n²),空间复杂度是O(1),因为并没有创建额外的存储空间。
  2. 双指针法(快慢指针法)

    • 定义两个指针,一个快指针和一个慢指针。
    • 快指针每次移动两步,慢指针每次移动一步。
    • 如果链表有环,那么两个指针最终一定会相遇。
    • 如果没有环,那么快指针会先到达链表的末尾,从而判断出链表没有环。
    • 在判断快指针是否为空时,要同时判断它的下一个节点是否为空,以防止程序出现异常。
    • 这种方法的时间复杂度是O(n),空间复杂度同样是O(1),因为只使用了两个指针变量。

在实际应用中,双指针法更为常用,因为它具有更低的时间复杂度。当需要判断链表是否有环时,可以根据具体需求选择合适的方法。