当前位置: 首页 > news >正文

LeetCode[142] 环形链表 II

哈希表匹配法

  1. set存储遍历过的节点
  2. 每次遍历查询set中是否有该节点
    • 有,则代表该节点为环的起点
    • 无,则插入set中,继续遍历链表
/**
 * 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*> myset; // 存储遍历过的节点
        while(head) // head为空时代表链表内没有环
        {
            if(myset.find(head)!=myset.end()) // 如果节点已经被遍历过,则为环的起点
                return head;
            myset.insert(head);
            head = head->next;
        }
        return nullptr;
    }
};

快慢指针

/**
 * 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* slow = head; // 慢指针
        ListNode* fast = head; // 快指针
        while(fast != nullptr) // 快指针为空,则代表不存在环,到链表尾部了
        {
            slow = slow->next; // 满指针前进一步
            if(fast->next == nullptr)
                return nullptr;
            fast = fast->next->next;// 快指针前进两步
            // 如果快慢指针相遇,存在环,寻找环的开始节点
            if(slow == fast)
            {
                ListNode* ptr = head;
                while(ptr!=slow)
                {
                    ptr = ptr->next;
                    slow = slow->next;
                }
                return ptr;
            }
            
        }
        return nullptr;
    }
};
http://www.dtcms.com/a/77052.html

相关文章:

  • 【C++】memset和memcpy函数
  • 案例驱动的 IT 团队管理:创新与突破之路:第二章 团队组建:从人才画像到生态构建-2.2.2案例:某游戏公司“特种作战小组“模式
  • NAT及P2P通信
  • 本地部署deepseek-r1建立向量知识库和知识库检索实践【代码】
  • defineExpose函数
  • matlab R2024b下载教程及安装教程(附安装包)
  • 嵌入式面经-C语言:智能指针,`#define` 和 `const`,`typedef`,头文件中定义静态变量
  • turfjs多边形切割多边形求交集
  • centos 如何将 nginx reload权限给其他用户
  • Linux安装部署Elasticsearch8 全过程记录
  • Nodejs使用redis
  • 解决leetcode第3480题删除一个冲突对后的最大子数组数目
  • Jocker靶机全面解析:漏洞挖掘、渗透测试与防御策略
  • RuoYi-Vue路由,Node
  • HOVER:人形机器人的多功能神经网络全身控制器
  • Leetcode-回溯-组合型
  • Vue 中如何使用 nextTick?
  • 解决uni-app授权弹框华为审核拒绝
  • OpenAI--Agent SDK简介
  • linux入侵排查-综合日志分析
  • halcon几何测量(一)3d_position_of_rectangle
  • 【QT:多线程、锁】
  • 自然语言处理 | 文本清洗的20种核心策略:从数据噪声到信息价值
  • YunSDR AIR:从架构革新到智能融合的演进之路
  • HTML 专栏总结:回顾与展望
  • ABAP PDF预览
  • 「自动驾驶背后的数学:从传感器数据到控制指令的函数嵌套」—— 揭秘人工智能中的线性函数、ReLU 与复合函数
  • win10搭建opengl环境搭建并测试--输出立方体球体和碗型并在球体上贴图
  • 使用WebDAV将文件传输到实时(RT)目标 转发
  • 3.数据探索与可视化基本图形(直方图、箱线图、散点图)——Python数据挖掘代码实践