当前位置: 首页 > Web前端 > JavaScript

Day60-100数据结构链表(三)——用双指针法查找链表中的节点

时间:2023-03-26 23:07:48 JavaScript

(一)需求以前做过,但还是忘记了。还是要细细体会,经常看。(二)双指针1.用双指针的方法在链表中寻找成环的结点Topic给定一个链表的头结点head,返回链表开始入环的第一个结点。如果列表是非循环的,则返回null。如果链表中有一个结点可以通过不断跟踪next指针再次到达,那么链表中就存在环路。为了表示给定链表中的环,评估系统内部使用整数pos表示链表尾部相连的链表中的位置(索引从0开始)。如果pos为-1,则列表中没有循环。注意:pos不作为参数传递,只是为了标识链表的实际情况。不允许修改链表。示例输入:head=[3,2,0,-4],pos=1输出:返回索引为1的链表节点解释:链表中有一个环,其尾部连接到第二个节点。2.思路分析3.JavaScript实现/***单向链表的定义。*functionListNode(val){*this.val=val;*this.next=null;*}*//***@param{ListNode}head*@return{ListNode}*/vardetectCycle=function(head){//快指针初始化letfast=head//慢指针初始化,相同起点让慢=headwhile(fast&&fast.next){fast=fast.next.next//走2步slow=slow.next//走1步if(fast==slow){//第一次相遇爆发}}//不循环if(!fast||!fast.next){returnnull}//链表头节点到环入口点的距离等于绕环第一个遇到点的距离-1圈然后回到圈入口点。这样,只要将其中一个指针放回头结点位置,另一个指针保持在第一个相遇点,两个指针一次向前移动1步。那么,最终相遇的节点就是入口节点。让newHead=headwhile(1){if(newHead==slow){break}newHead=newHead.nextslow=slow.next}returnnewHead};以上参考链接Leecodehttps://leetcode-cn.com/leetb...写在最后的话在学习的路上,我经常偷懒《有想学技术需要监督的同学嘛~》https://mp.weixin.qq.com/s/Fy...

最新推荐
猜你喜欢