环形链表Ⅱ-力扣

第一种解法时哈希表,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;
    }
};
相关推荐
j_xxx404_13 分钟前
蓝桥杯基础--递归
数据结构·c++·算法·蓝桥杯·排序算法
森林里的程序猿猿13 分钟前
导致内存泄漏的ThreadLocal详解
java·jvm·数据结构
圣保罗的大教堂17 分钟前
leetcode 2906. 构造乘积矩阵 中等
leetcode
j_xxx404_18 分钟前
蓝桥杯基础--枚举
数据结构·c++·算法·蓝桥杯
做怪小疯子19 分钟前
Leetcode刷题——矩阵遍历
算法·leetcode·矩阵
羊小猪~~21 分钟前
算法/力扣--链表经典题目
数据结构·后端·考研·算法·leetcode·链表·面试
草原上唱山歌32 分钟前
如何理解C语言中的指针?
c语言·开发语言·数据结构
参.商.34 分钟前
【Day47】912. 排序数组【6 种排序】
leetcode·golang·排序算法
We་ct35 分钟前
LeetCode 33. 搜索旋转排序数组:O(log n)二分查找
前端·算法·leetcode·typescript·个人开发·二分·数组
重生之我是Java开发战士40 分钟前
【优选算法】优先级队列:最后一块石头的重量,数据流中的第K大元素,前K个高频单词,数据流中的中位数
数据结构·算法·leetcode