LeetCode 环形链表II:为什么双指针第二次会在环的入口相遇?

快慢指针

为什么相遇后让快指针回到起点,再让快指针和慢指针都一步一步地走,它们就会在环的入口相遇?

复杂度

  • 时间复杂度: O(n)
  • 空间复杂度: O(1)
java 复制代码
 public ListNode detectCycle(ListNode head) {
        ListNode slow = head, fast =head;
        ListNode result = null;
        while (fast != null && fast.next != null) {
            slow = slow.next;
            fast = fast.next.next;
            if (fast == slow) {
                break;
            }
        }
        fast = head;
        while (slow != null && slow.next != null) {
            if (fast == slow){
                result = fast;
                break;
            }
            slow = slow.next;
            fast = fast.next;
        }
        return result;
    }
相关推荐
我带你来这儿就是为了告诉你我几秒前
C++23新特性前瞻
开发语言·c++·算法
陌夏4 分钟前
快速排序 (Quick Sort)
算法
IronMurphy14 分钟前
【算法二十九】 437. 路径总和 III
算法·深度优先
2501_9083298515 分钟前
C++安全编程指南
开发语言·c++·算法
计算机安禾17 分钟前
【C语言程序设计】第39篇:预处理器与宏定义
c语言·开发语言·c++·vscode·算法·visual studio code·visual studio
参.商.20 分钟前
【Day43】49. 字母异位词分组
leetcode·golang
m0_5698814728 分钟前
C++中的装饰器模式变体
开发语言·c++·算法
笒鬼鬼30 分钟前
【API接口】最新可用红果短剧接口
算法·api·笒鬼鬼·红果短剧·接口源码
weixin_4219226931 分钟前
C++与边缘计算
开发语言·c++·算法
2401_8319207433 分钟前
C++编译期数组操作
开发语言·c++·算法