快慢指针寻找环入口——学习笔记

本文介绍了快慢指针用于判断链表是否存在环以及寻找环入口的方法。快慢指针原理是通过一个快指针每次移动两步,一个慢指针每次移动一步,当快指针追上慢指针时,说明链表存在环。在找到相遇点后,通过快指针回到起点,慢指针停留在相遇点,两者同步移动,首次相遇的位置即为环的入口。文章还详细推导了在不同情况下,快慢指针相遇节点的计算方式。
摘要由CSDN通过智能技术生成

快慢指针常用于判断链表中是否有环和寻找链表中值。

快慢指针的原理在于一快一慢两个指针,快指针每次移动两个节点,慢指针每次移动一个节点。

 

如何判断链表有环?

假如链表没环,那么快指针必然会先遇到空指针,即可判断链表无环。

而当链表有环时,快慢指针必然在环内循环,那么此时快慢指针就像钟表上的时针和分针,不管怎么转总有一刻会重合在一起。

可能有同学还不是特别明白。

首先有个长度为n的环,假设此时快指针在x1处,慢指针在x2处。

环
-------->x1---------->---
^                       |
|                       | 
|                       |       
---<-----------x2<-------

此时快指针距离慢指针 d=x1+n-x2

快指针每次移动2,慢指针每次移动1,所以快指针相对慢指针移动1,那么只需要移动 d 次快指针就能追上慢指针了。

如果还不清楚就想想钟表吧~看代码:

struct Node{
    int val;
    Node *next;
};

//判断链表是否有环
bool hasCircle(Node *node) {
    
    //定义快慢指针
    Node *fast=node;
    Node *slow=node;
    
    //因为快指针要走两个节点,所以要多判断一步,遇到空指针说明没有环
    while (fast != NULL && fast->ne
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值