https://leetcode-cn.com/problems/linked-list-cycle/
## 先放上视频连接 有两种解法
### 解法1
https://www.bilibili.com/video/BV1mo4y1o7sL?from=search&seid=16310845328186570035
创建一个集合 判断已经遍历过的节点地址是否在集合中如果在就说明有集合
/**
* Definition for singly-linked list.
* class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public boolean hasCycle(ListNode head) {
//解法2
if(head == null) return false;
HashSet set = new HashSet();
ListNode p = head;
while(p!=null && p.next != null){
if(set.contains(p)){
return true;
}
set.add(p);
p = p.next;
}
return false;
}
}
## 解法2
https://www.bilibili.com/video/BV1NA411Y7AX/?spm_id_from=333.788.recommend_more_video.4
使用快慢指针 重要掌握up主的一个结论 差多少步就会在多少步之后追上
public boolean hasCycle(ListNode head) {
if (head == null) {
return false;
}
ListNode l1 = head, l2 = head.next;
while (l1 != null && l2 != null && l2.next != null) {
if (l1 == l2) {
return true;
}
l1 = l1.next;
l2 = l2.next.next;
}
return false;
}