当前位置: 首页 > 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.mrgr.cn/news/95011.html

相关文章:

  • JAVA中关于图形化界面的学习(GUI)动作监听,鼠标监听,键盘监听
  • 【Java】链表(LinkedList)(图文版)
  • Linux IP 配置
  • 利用大语言模型生成的合成数据训练YOLOv12:提升商业果园苹果检测的精度与效率
  • Spring相关面试题
  • numpy学习笔记1:zeros = np.zeros((3, 3)) 详解
  • 安装并使用anaconda(宏观版)
  • 库的制作与原理 linux第课
  • 企业级 GitLab 开发流程全解
  • dockerfile 编写入门
  • numpy学习笔记4:np.arange(0, 10, 2) 的详细解释
  • sparksql的Transformation与 Action操作
  • 浏览器工作原理深度解析(阶段二):HTML 解析与 DOM 树构建
  • 【二分查找】模板题:在排序数组中查找元素的第一个和最后一个位置
  • React生命周期
  • 可视化图解算法:链表中倒数(最后)k个结点
  • java-正则表达式-集合-泛型
  • 【数据库】SQL设计指南:如何编写性能优异的SQL
  • el-table的行向上移动向下移动,删除选定行
  • Diffie-Hellman 加密协议介绍 (DH,DHE,ECDHE)