LeetCode 141. Linked List Cycle

本文介绍了一种通过快慢指针技术来检测单向链表中是否存在环的方法,并分享了实现过程中的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里写图片描述
判断一个单向链表中是否有环。

我的方法是让一个指针一次走一步,另一个指针一次走两步。让他们在不为空的情况下一直走。如果有环,这两个指针一定会有重合的时候,如果没环,他们迟早会有一个为空。

AC代码:

bool hasCycle(ListNode *head) { 
    ListNode *one,*two;
    one = two = head;
    while(one != NULL && two != NULL){
        if(one->next != NULL) 
            one = one->next;
        else return false;

        if(two->next != NULL){
            if(two->next->next != NULL){
                two = two->next->next;    
            }else{
                return false;
            }
        }else return false;

        if(one == two)
            return true;

    }
    return false;
}

这道题我遇到的主要的问题是two指针在走的时候,一开始我是
if(two->next->next !=NULL) two = two->next->next;
这样如果two->next就为空的话会出现编译错误。
我又改成
if(two->next->next !=NULL && two->next !=NULL )
          two = two->next->next;
但这样还是会在two->next的时候出现指针越界。所以一定要先看next是否为空先。以后要注意这种跳着走的,要一步一步逐步去判断是否为空。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值