题目
点击前往
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。
图示两个链表在节点 c1 开始相交:
题目数据 保证 整个链式结构中不存在环。
注意,函数返回结果后,链表必须保持其原始结构 。
解题思路
- 简单来说,就是求两个链表交点节点的指针。 这里同学们要注意,交点不是数值相等,而是指针相等。
- 我们求出两个链表的长度,并求出两个链表长度的差值,然后让curA移动到,和curB 末尾对齐的位置。
- 此时我们就可以比较curA和curB是否相同,如果不相同,同时向后移动curA和curB,如果遇到curA == curB,则找到交点。
- 否则循环退出返回空指针。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
var getListLen = function(head) { let len = 0, cur = head; while(cur) { len++; cur = cur.next; } return len; } var getIntersectionNode = function(headA, headB) { let cur_headA = headA,cur_headB = headB; let alen = getListLen(cur_headA),blen=getListLen(cur_headB); if(alen < blen){ [cur_headA,cur_headB] = [cur_headB,cur_headA]; [alen,blen] = [blen,alen]; } let i = alen - blen; while(i-- > 0){ cur_headA = cur_headA.next; } while(cur_headA && cur_headA != cur_headB){ cur_headA = cur_headA.next; cur_headB = cur_headB.next; } return cur_headA };
|