判断链表中是否有环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循环,要对循环体内所有的指针操作判非空作为终止条件。
全部评论

相关推荐

湫湫湫不会java:1.在校经历全删了2.。这些荣誉其实也没啥用只能说,要的是好的开发者不是好好学生3.项目五六点就行了,一个亮点一俩行,xxx技术解决,xxx问题带来xxx提升。第一页学历不行,然后啥有价值的信息也没有,到第二页看到项目了,第一个项目九点,第二个项目像凑数的俩点。总体给人又臭又长,一起加油吧兄弟
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务