初级算法-判断链表是否有环

判断链表是否有环是一个老生长谈的问题了,方法有很多,但是我觉得比较容易理解的还是快慢指

针法。

思路如下:两个人在赛跑,两个人速度不变,如果是沿着没有环的赛道,那一定是跑的快的人先到

终点(也就是指针到达链表尾部),如果有环,那么跑的快的一定会先进入环里,并套圈跑的慢的

人,也就是俩个人一定会相遇。

代码如下:

bool hasCycle(ListNode *head) {
        if(head==NULL||head->next==NULL)  return false;
        ListNode* first=head->next;
        ListNode* low=head;
        while(first!=low){
            if(first==NULL||first->next==NULL) return false;
            first=first->next->next;
            low=low->next;
        }
        return true;
    }

方法二:使用set集合,set是用来去重的有用道具,其中的count()函数用来判断集合中是否存在某

元素。代码如下

bool hasCycle(ListNode *head) {
        set<ListNode*> se;
        while (head != nullptr) {
            if (se.count(head)) {
                return true;
            }
            se.insert(head);
            head = head->next;
        }
        return false;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值