1.题目描述
2.题解
i.暴力解法:
用两个快慢指针,两层循环,不断遍历直到最后找到两个指针指向地址值一样的节点时,返回其中一个节点,否则则返回null(意味着不成环)。
ii.双指针判断成环+方程思想解成环初始位置
--双指针判断成环:
定义两个快慢指针,快指针一次向后移动两位,慢指针一次向后移动一位。一个循环不断让两个指针向后遍历直到两个指针所指的节点地址值相同。(如此定义快慢指针的速度是为了避免快指针跳过慢指针的情况)
--方程思想解成环初始位置
3.代码示例
/**
* 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) {
ListNode fast=new ListNode(0);
ListNode slow=new ListNode(0);
ListNode index1=new ListNode(0);
ListNode index2=new ListNode(0);
fast=head;
slow=head;
index1=null;
index2=head;
while(fast!=null&&fast.next!=null){
fast=fast.next.next;
slow=slow.next;
if(fast==slow){
index1=slow;
break;
}
}
if(index1!=null){
while(index1!=index2){
index1=index1.next;
index2=index2.next;
}
}
return index1;
}
}