/**

  • 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) {
      //设置一个快指针,每次向前挪两个位置;设置一个慢指针,每次向前挪一个位置
      //两指针同时向前移动,直到快指针为null,说明没有环;若移动过程中,快慢指针相遇了,则说明有环
      if(!head) return false;
      ListNode * fast = head;
      ListNode * slow = head;
      while(1)
      {
          if(!fast->next) return false;  //快指针挪两步,每挪一步前,需要先“试探”下一步是否为空,为空表明没有环
          else fast = fast->next;
          if(!fast->next) return false;
          else fast = fast->next;
          slow = slow->next;             //慢指针向前挪一步
          if(fast->val == slow->val) return true;   //相遇,有环
      }
    }
    };