LeetCode142 环形链表 II

前言

题目: 142. 环形链表 II
文档: 代码随想录------环形链表 II
编程语言: C++
解题状态: 思路错误,链表不允许被修改

思路

两步走,第一步,判断有没有环,第二步,判断入环口在哪边。

代码

快慢指针法

  • 第一步

    定义两个指针,一个快指针,一个慢指针。快指针每次平移两个,慢指针每次平移一个。如果两个指针可以相遇,就代表有环。在一个环内,快速的移动肯定会经过慢速的移动

  • 第二步

    在两个指针的相遇处,令头节点和相遇节点相向而行,两个指针必定会相遇,并且相遇点就是环的入口。数学推理可见代码随想录讲解。

cpp 复制代码
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode *detectCycle(ListNode *head) {
        ListNode* fast = head;
        ListNode* slow = head;

        while (fast != NULL && fast -> next != NULL) {
            fast = fast -> next -> next;
            slow = slow -> next;
            if (fast == slow) {
                ListNode* index1 = fast;
                ListNode* index2 = head;
                while (index1 != index2) {
                    index1 = index1 -> next;
                    index2 = index2 -> next;
                }
                return index1;
            }
        }
        return NULL;
    }
};
  • 时间复杂度: O ( n ) O(n) O(n)
  • 空间复杂度: O ( 1 ) O(1) O(1)
相关推荐
是娇娇公主~6 分钟前
C++迭代器详解
开发语言·c++·stl
qq_148115376 分钟前
C++网络编程(Boost.Asio)
开发语言·c++·算法
2301_8042154112 分钟前
内存映射文件高级用法
开发语言·c++·算法
ZHENGZJM20 分钟前
负载均衡式在线评测系统(Load-Balanced Online OJ)技术全景指南
c++·负载均衡·软件工程·idea
CoderCodingNo21 分钟前
【GESP】C++八级考试大纲知识点梳理 (5) 代数与平面几何
开发语言·c++
爱喝白开水a27 分钟前
春节后普通程序员如何“丝滑”跨行AI:不啃算法,也能拿走AI
java·人工智能·算法·spring·ai·前端框架·大模型
张辰宇-43 分钟前
AcWing 5 多重背包问题 II
算法
zhangren024681 小时前
PHP vs C++:从Web脚本到系统编程的终极对比
开发语言·c++·php
小则又沐风a1 小时前
类和对象(C++)---上
java·c++·算法
临溟夜空的繁星1 小时前
C++STL—— list
开发语言·c++·list