【链表】判断是否为环形链表

做题时思路:(正确)

  1. 判断链表是否只有一个结点或者没有结点,若是则说明该链表不会是环形链表。返回0
  2. 创建两个指针,pointer1和pointer2。pointer1指向头结点,pointer2指向head→next
  3. 当pointer2不为NULL时进行遍历,若pointer2的位置小于pointer1或者pointer2→next指向本身,说明链表为环形链表,返回1
  4. 若pointer2为NULL,说明链表为非环形链表,返回0
bool hasCycle(struct ListNode *head) {
		//若链表中只有一个结点或没有结点,链表不会是环形链表
    if(head == NULL || head->next == NULL)
        return 0;
    struct ListNode *pointer = head;
    struct ListNode *pointer2 = head->next;
    while(pointer2 != NULL) {
				//如果在遍历过程中pointer2的位置小于pointer1,或者pointer2->next指向了自身(循环最后一个结点),返回true
        if(pointer2 < pointer || pointer2->next == pointer2)
            return 1;
        pointer2 = pointer2->next;
        pointer = pointer->next;
    }
    return 0;
}