题目链接
142. 环形链表 II
关键点:
在两个指针第一次相遇时,将慢指针退到头结点的位置,快指针仍位于相遇点处,两个指针相同速度出发,再次相遇时的点即为环形链表的入口点。
/**
* Definition for singly-linked list.
* class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListNode detectCycle(ListNode head) {
if(head == null || head.next == null) return null;
ListNode first = head;
ListNode second = head;
while(second != null && second.next != null){
first = first.next;
second = second.next.next;
//当两个指针第一次相遇的时候
if(second == first){
//第一个指针退到开始位置
first = head;
//此时的第二个指针在相遇点,然后两个指针同时走
//再次相遇的点即为入口点
while(first != second){
first = first.next;
second = second.next;
}
return first;
}
}
return null;
}
}