链表是否有环

class Solution {
public:
    bool hasCycle(ListNode *head) {
        // 首先判断链表是否为空
        if(head == NULL) return false;

        // 定义快慢指针
        ListNode *slow = head;

        // 其实快指针也可以和慢指针同起点,只要快指针跑得比满指针快就行
        ListNode *fast = head->next;

        while(1)
        {
            if(fast != slow && fast !=NULL && fast->next !=NULL ) // 如果快指针还没有跑完,并且还没有遇到交点,就继续跑
            {
                slow=slow->next ;
                fast=fast->next->next;
            }
            else break;
        }
        // 跳出循环的条件可能是链表跑完了还没有环,还有可能是有环

        if (fast == slow) // 如果有环,就返回true
        return true;

        // 没有环就返回false
        return false;

    }
};
上一篇:删除有序数组中的重复元素(要求空间复杂度为O(1))


下一篇:LeetCode-9.回文数(Java)