1.问题描述
比如说有一个链表
这个链表返回第三个结点,如果无环,返回null。
2.问题分析
这道题需要设置两个指针,一个快,一个慢,快指针走两步,慢指针走一步,快指针不能走大于2的步数,会造成无法遇见。
找到相遇位置以后,有两种解决办法,一种是转化成相交问题。
另外一种是一个从头结点,一个从相遇结点,知道相同为止。
public class Solution {
public ListNode detectCycle(ListNode head) {
ListNode fast=head;
ListNode slow=head;
do
{
if (fast == null) {
return null;
}
fast = fast.next;
if (fast == null) {
return null;
}
fast = fast.next;
slow = slow.next;
}while(fast!=slow);
ListNode p=head;
ListNode q=slow;
while(p!=q)
{
p=p.next;
q=q.next;
}
return p;
}
}