# LeetCode 142 环形链表II 题解

文章目录

  • LeetCode 142 环形链表II 题解
  • 一、题型归类
  • 二、思路
    • 1.分析题目
    • 2.代码如下
  • 总结


LeetCode 142 环形链表II 题解

# LeetCode 142 环形链表II 题解_第1张图片

一、题型归类

双指针

二、思路

1.分析题目

1.要确定链表是否有环,可以利用快慢指针的特性来处理本题,设置一个快指针,一个慢指针,利用数学知识推导可知,若有环,则快慢指针必定会相遇。若无环则快指针必会走到为空的时候。
2.确定有环,则将两个指针的速度调为一致,把快指针调回表头,最终相遇节点即为环的初始起点。

2.代码如下

/**
 * 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,*fast=head;
        do{
            if(!fast||!fast->next) return nullptr;
            fast=fast->next->next;
            slow=slow->next;
        }while(fast!=slow);
        fast =head;
        while(fast!=slow){
            slow=slow->next;
            fast=fast->next;
        }
        return slow;
    }
};

总结

# LeetCode 142 环形链表II 题解_第2张图片
**总结分析:**快慢指针是常见的处理链表的环路问题的套路,要学会题型归类

你可能感兴趣的:(链表,leetcode,数据结构,c++)