代码随想录--链表--环形链表题型
创始人
2025-05-29 04:09:29
0

把环形链表讲清楚!| LeetCode:142.环形链表II (opens new window)

这道题有两问,
一个是链表有没有环,一个是环的入口是哪个。
判断链表有没有环,应该考虑用双指针,一个快指针一个慢指针,如果有环则快慢指针一定会相遇,如果无环则不会相遇。
注意,快指针一次走2个节点,慢指针一次走1个节点,这样快指针永远比慢指针多走1个节点,在环里就一定会与慢指针相遇。如果你设成快指针一次3个节点,慢指针一次1个节点,那快指针有可能因为一下子跨过慢指针从而导致没有与慢指针相遇。

①慢指针在走完环的第一圈之前,一定已经与快指针相遇了,假设左边为快指针,右为慢指针,一节为一圈,如图慢指针走过一圈时,快指针已在慢指针前面,说明在慢指针走完一圈之前,快指针就已经在某刻超过慢指针即相遇,即此时慢指针还没走完一圈就相遇。

快慢指针相遇只是为了找出index1
利用下图数学推理可知x=z,所以把快慢指针相遇的地方定义为index1,头结点定义为index2,然后index1与index2一起走每次走一步,到环的入口处就相遇(因为x=z嘛你们俩又都是每次一起走一步)

 //注意只需要判断fast和fast的next不为空即可,不用限定fast->next->next也不为空。因为1-2-null可以,而null或者1-null(快指针都走不了第一步咋判断)只能返回null
fast为空你还往后走那就是对空指针进行操作是出错的,fast的next为空例1-null,那你fast走next再走next,那就是1走向next即到null,还next即对null操作,那就是对空指针进行操作即错,fast的next的next就可以为空例1-2-null,那快指针就从1跳到null,没问题,指针可以指向null啊,可是你要是继续在null的位置上继续往后即操作null让其->next即对空指针进行操作就错所以不进入循环了。

大致代码套路

fast=head;
slow=head;
while(fast!=null&&fast->next!=null){ 
   fast=fast->next->next;
   slow=slow->next;
   if(fast==slow){
        index1=fast;
        index2=head;
        while(index1!=index2){
                   index1=index1->next;
                   index2=index2->next;
              }
          return index1;
     }
}
return null;
 

相关内容

热门资讯

旬阳检察:公益诉讼守护“一老一... 为切实保障“一老一小”这一特殊群体的“舌尖安全”,今年以来,旬阳市检察院公益诉讼部门迅速行动,自4月...
日本政府基本敲定大米政策将转向... (央视财经《第一时间》)据日本媒体报道,日本政府于5日在首相官邸召开了有关确保大米稳定供应的会议,基...
王有银律师:从 “专注个案” ... 王有银律师的法律职业生涯始于征地拆迁领域,他以卓越的专业能力和坚定的信念为无数被拆迁人争取到了合法权...
谁该为信用卡逾期诉讼买单?银行... 本报(chinatimes.net.cn)记者卢梦雪 北京报道 信用卡逾期产生的诉讼费最终应由谁“买...
福建:分级分类评价就业工作,实... 中国教育报-中国教育新闻网讯(记者 黄星)日前,《中共福建省委 福建省人民政府关于全方位促进高质量充...
山西省委、运城市委决定:王润任... 稷山县干部大会召开 王润同志任稷山县委书记 8月5日,稷山县干部大会召开,宣布省委、市委任职决定,...
特朗普首次明确表态:万斯最有可... 当地时间8月5日,美国总统特朗普表示,副总统万斯“最有可能”成为他的“接班人”,担任2028年共和党...
扎哈罗娃:俄外交使团人员所乘车... 【环球网报道】据俄罗斯《报纸报》网站等媒体报道,俄外交部发言人扎哈罗娃5日称,俄外交使团人员乘坐的一...
特朗普政府拟正式取消马斯克的“... 参考消息网8月6日报道据路透社8月5日报道,两位知情人士透露,特朗普政府计划最早于5日正式取消由美国...
长春朝阳法院开展机动车交通事故... 中新网吉林新闻8月6日电(谭伟旗 范煜琪)近日,长春市朝阳区人民法院应邀为某保险公司开展机动车交通事...