环形链表Ⅱ-力扣

第一种解法时哈希表,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;
    }
};
相关推荐
想吃火锅10056 小时前
【leetcode】14.最长公共前缀js
算法·leetcode·职场和发展
小林ixn7 小时前
LeetCode 206. 反转链表(迭代 + 递归详解)
算法·leetcode·链表
菜鸟‍9 小时前
LeetCode 1 27 和 704 || 两数之和 移除元素 二分查找
算法·leetcode·职场和发展
退休倒计时10 小时前
【每日一题】LeetCode 142. 环形链表 II TypeScript
算法·leetcode·链表·typescript
花间相见11 小时前
【LeetCode02】—— 两数之和:哈希表入门经典详解
数据结构·散列表
zhengzhouliuhaha13 小时前
智能医疗设备控费系统:以全院一体化管控,筑牢医疗资源“安全阀”
大数据·数据结构·人工智能·算法·安全·机器学习·软件需求
sjsjs1114 小时前
力扣3558. 给边赋权值的方案数 I
算法·leetcode·职场和发展
花间相见14 小时前
【LeetCode01】—— 无重复字符的最长子串:滑动窗口经典题详解
python·算法·leetcode
Yiyaoshujuku14 小时前
化合物数据集API接口(数据结构及样例)
java·网络·数据结构
fu的博客14 小时前
【数据结构16】图:基于邻接矩阵、邻接表实现DFS/BFS
数据结构·算法