本题用快慢指针,来解题,思路很简单一个指针指向他下一个,另一个指向他的下下个,两者如果是在环中,快指针迟早会追上慢指针,这时两者相等返回true,如果不为环则快指针会走到空返回false。
小白刚刚练习代码,还有很多可以优化的地方,在这里主要是提供自己的思路。注意快慢只能差1,如果快为3格一次,慢为1格一次,则只有环内的数为偶才可以追上,不然永远遇见不了,以此类推。
bool hasCycle(struct ListNode* head ) {
    if(head==NULL)
        return false;
    struct ListNode*slow=head->next;
    if(slow==NULL)
        return false;
    struct ListNode* first=slow->next;
    while(first!=NULL&&first->next!=NULL)//这里注意判断条件,快指针因为一次跳两个所以要加上两个NULL的判断,防止出现在NULL中指向NULL->next会出现段错误,我吃过亏了。
    {
        if(first==slow)
            return true;
        else
        {
              slow=slow->next;
            first=first->next->next;       
        }       
    }
    return false;
}