java
/**
* 题目链接:https://leetcode.cn/problems/linked-list-cycle-ii/
* 使用 map集合来存储链表的结点,在每次添加节点的时候使用map.containsValue()方法进行判断,
* 如果存在相同的节点,就说明有环,然后返回当前节点
* 举例:3 =》2 =》0 =》3 (这里0指向头节点 3)
* 我们依次向map中存储节点:
* 0: 3,
* 1: 2,
* 2: 0,
* 再次添加3的时候,发现map中已经存在该节点,因此返回 3
* @param head
* @return
*/
public static ListNode detectCycle(ListNode head) {
Map<Integer, ListNode> map = new HashMap<>();
int i = 0 ;
while(head != null){
if(map.containsValue(head)){
return head;
}
else{
map.put(i, head);
i ++ ;
head = head.next;
}
}
return null;
}