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

第61-100天数据结构链表(四)——使用双指针法求相交链表的节点

时间:2023-03-27 17:58:21 JavaScript

(一)第一次需要做,感觉解法还挺小说,记录一下~(二)用双指针法求相交链表的节点1.题目给你两个单向链表的头节点headA和headB。请找到并返回两个单链表相交的起始节点。如果两个链表之间没有相交节点,则返回null。如图所示,两个链表相交于节点c1:标题数据保证整个链表结构无环。注意链表在函数返回结果后必须保持原来的结构。自定义评估:评估系统有以下输入(此输入不适用于您设计的程序):intersectVal-相交起始节点的值。如果没有相交节点,则此值为0从这些输入,系统将创建一个链式数据结构并将两个头节点headA和headB传递给您的程序。如果程序正确返回相交节点,则您的解决方案将被视为正确答案。示例:输入:intersectVal=8,listA=[4,1,8,4,5],listB=[5,6,1,8,4,5],skipA=2,skipB=3输出:相交于'8'说明:交集节点的值为8(注意如果两个链表相交则不能为0)。从各自的表头算起,链表A为[4,1,8,4,5],链表B为[5,6,1,8,4,5]。A中,相交节点之前有2个节点;在B中,相交节点之前有3个节点。提示:listA的节点数为mlistB,节点数为n1<=m,n<=3*1041<=Node.val<=1050<=skipA<=m0<=skipB<=n如果有listA和listB之间没有交集,如果listA和listB有交集,则intersectVal为0,intersectVal==listA[skipA]==listB[skipB](1)内存计划?2、思路分析两指针解一开始一个指向链表A,一个指向链表B,然后每次都要向后移动一位,顺便检查节点是否相等.如果链表A和链表B不相交,那基本没什么好说的,我们这里假设链表A和链表B相交。那么就会有两种情况,一种是链表A的长度等于链表B的长度,他们每走一步,肯定会在交点相遇。一种是链表A的长度不等于链表B的长度,如下图,它们虽然有交集,但是长度不同,所以完美交错,找不到交点即使所有链表都消失了。.让我们仔细看看上面的图片。如果A指针走完链表A,再从链表B开始走到交汇点,相当于走完了两个链表的所有节点。同理,如果B指针遍历链表B已经遍历完,再从链表A开始到交汇点就相当于走完了两个链表的所有节点。所以如果A指针到了链表的末尾,下一步就让他从链表B开始。同理,如果B指针到了链表的末尾,下一步就让他从链表A开始。只要两个链表相交,就一定会在交点相遇。如果不相交,它们会同时走到两个链表的末尾。让我们画一幅画。如上图,如果指针A和指针B一直走3.JavaScript实现/***单向链表的定义。*functionListNode(val){*this.val=val;*this.next=null;*}*//***@param{ListNode}headA*@param{ListNode}headB*@return{ListNode}*/vargetIntersectionNode=function(headA,headB){letnodeA=headAletnodeB=headB//根据判断两个链表是否相同,结束循环while(nodeA!=nodeB){//如果还没有走到尽头,就继续if(nodeA!=null){nodeA=nodeA.next}else{//走到最后,转为B链表nodeA=headB}if(nodeB!=null){nodeB=nodeB.next}else{//走到最后,转为B链表nodeB=headA}}//走完后,要么相交要么null返回nodeA};以上参考链接Leecodehttps://leetcode-cn.com/leetb...写在学习的最后,经常偷懒《有想学技术需要监督的同学嘛~》https://mp.weixin.qq.com/s/Fy...