环形链表Ⅱ-力扣

第一种解法时哈希表,set在使用insert插入时,会返回一个pair,如果pair的值为0,则插入失败,那么返回这个插入失败的节点,就是入环的第一个节点,代码如下:

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) {
        unordered_set<ListNode*> set;
        auto cur = head;
        while(cur != NULL){
            if(set.insert(cur).second){
                cur = cur->next;
            }else{
                return cur;
            }
        }
        return NULL;
    }
};

第二种快慢指针的写法,数学推导相当精妙,推到过程可以参考代码随想录-环形链表Ⅱ

参考代码:

cpp 复制代码
class Solution {
public:
    ListNode *detectCycle(ListNode *head) {
        ListNode *slow = head, *fast = head;
        while (fast != nullptr) {
            slow = slow->next;
            if (fast->next == nullptr) {
                return nullptr;
            }
            fast = fast->next->next;
            if (fast == slow) {
                ListNode *ptr = head;
                while (ptr != slow) {
                    ptr = ptr->next;
                    slow = slow->next;
                }
                return ptr;
            }
        }
        return nullptr;
    }
};
相关推荐
小星星闪亮登场18 分钟前
ST表--倍增思想
开发语言·数据结构·c++·算法·思维
xiaohebang1 小时前
流失预测模型设计:行为特征分析算法选型
大数据·数据结构·经验分享
青 春 记 忆3 小时前
LeetCode 104. 二叉树的最大深度|Python 解法详解
python·算法·leetcode
祖力554 小时前
快速学会数据结构中的链式队列与循环队列
linux·c语言·数据结构·算法
布莱克6055 小时前
理解B+树:原理、特性与应用场景
数据结构·数据库·mysql
evans在进步6 小时前
LeetCode 198:打家劫舍——Java 动态规划详解
java·leetcode·动态规划
晚风叙码7 小时前
C++哈希表实现:开放定址法和链地址法 (哈希桶)
数据结构·c++·哈希算法·散列表
imaol17 小时前
哈希表--数据结构
数据结构·散列表
Nil2087 小时前
leetcode 234回文链表
算法·leetcode·链表
ZC跨境爬虫7 小时前
LeetCode 119. 杨辉三角 II(原地更新优化详解 + Java Python 实现)
java·python·leetcode