代码随想录--链表--环形链表题型
创始人
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;
 

相关内容

热门资讯

原创 中... 联合国的最新表态令人精神一振,这种明确态度其实本就顺理成章。台湾自古属于中国,这是铁一般的事实,中国...
花800元就能买自己的死亡证明... 花800元就能买到 本人的精神诊断报告和死亡证明? 近日,“假证定制”业务 在多个电商和社交平台 死...
智能平台支撑政策落地 实达集团... 11月17日,福建省发展和改革委员会网站发布《福建省数据管理局关于印发〈福建省数据流通交易管理办法(...
祥明智能:制定对外投资管理制度 祥明智能公告称,为规范公司及控股子公司对外投资、资产处置的程序及审批权限,建立有效控制机制保障资金运...
美国9月非农数据受政府关门扰动... 11月21日,中国银河证券发布研报对美国9月非农数据进行点评。研报指出,9月新增就业回到增长区间,失...
原创 高... 近日,随着日本政坛极端言论频频出现,尤其是汉奸石平的发声,再次引发了人们对中日关系未来走势的广泛关注...
日媒曝光:日本曾制定3套“夺岛... 据央视新闻报道,随着日本首相高市早苗涉台挑衅言论持续发酵,日本自卫队在靠近台海的岛屿加强军力部署的情...
舞蹈家黄豆豆获破格提拔,已任副... 今年4月拟破格提拔的舞蹈家黄豆豆,已有新消息。 澎湃新闻注意到,中国舞蹈家协会官网近日更新后显示,黄...
李霄鹏告别青岛海牛:战术调整与... 随着2023赛季的落幕,李霄鹏教练组已正式与青岛海牛球员告别,确认下赛季将不再继续执教。这一决定不仅...