总是不能够考虑到所有的情况,都快吐了

总结:1.判断链表是否成环,主要看下一个节点是否为NULL,2.快慢指针

1.首先没有节点、只有一个节点,肯定没有环
2.有两个节点,如果没有环,head->next->next==NULL;所以1,2两种情况可以放到一起判断
3.两个及两个以上节点,如果快慢指针相遇,那就是有环,如果下一个节点或者下下一个节点为NULL,就说明没有环,退出循环,返回false

/** * 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==NULL||head->next==NULL||head->next->next==NULL)
        return false;
        //链表有两个及以上的元素
        ListNode* fast=head->next->next;
        ListNode* slow=head;

        while(slow!=fast)
        {
   
            if(fast->next==NULL||fast->next->next==NULL)
            return false;
            fast=fast->next->next;
            slow=slow->next;
        }
        return true;
    }
};

作者:huuh
链接:https://leetcode-cn.com/problems/linked-list-cycle/solution/jian-chi-jiu-shi-sheng-li-ao-li-gei-by-huuh/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。