判断链表中是否有环C++实现

判断链表中是否有环

https://www.nowcoder.com/practice/650474f313294468a4ded3ce0f7898b9

/**
 * 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){
            return false;
        }
        
        ListNode* fast=head;
        ListNode* slow=head;
        
        while((fast->next!=NULL)&&(fast!=NULL)){//如果链表没有环则fast必然先到末尾,不用判断slow
            fast=fast->next->next;
            slow=slow->next;
            
            if(fast==slow){
                return true;
            }
        }
        
        return false;
        
    }
};

问题:

  1. fast每次步进的步长为2,为什么在while条件中是fast->next!=NULL而不是fast->next->next!=NULL?
  2. 经测试,fast非的是slow的2倍速才行,3倍速4倍速都通不过为撒?

结论:

  1. 不管有多少个next指针,对其判非空都是只判断fast->next非空就行。
  2. 对于fast=fast->next配合while循环,要对循环体内所有的指针操作判非空作为终止条件。
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务