/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    bool hasCycle(ListNode *head) {

        if (!head->next || !head) {	//如果链表为空或者链表只有一个元素,则链表没环
            return false;
        }
        ListNode* fast = head;//定义一个快指针
        ListNode* slow = head;//定义一个慢指针
        while (fast->next->next && fast->next) {
            fast = fast->next->next;	//每次快指针向后走两步
            slow = slow->next;	//每次慢指针向后走一步
            if (fast == slow) {	//如果快慢指针相遇了,说明链表有环,否则没环
                return true;
            }
        }
        return false;
    }
};