题目描述:给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。
首先要搞明白不是值相等,而是指针相等,这道题有两个解法,一个是哈希表,即把headA存进哈希表,然后遍历headB看看是否有相等的值,有则是链表是相交的
另一个是双指针法,即headA和headB同时去遍历,但是如果值为空则指向另一条链表的头节点继续遍历,如果两条链表相交,则一定会在两个指针指向null前相交,只能说它更像一个数学题,应该是可以证明出来的,看题解我也是半天才反应过来,以下是代码
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} headA
* @param {ListNode} headB
* @return {ListNode}
*/
var getIntersectionNode = function(headA, headB) {
while(headA === null || headB === null) {
return null;
}
let pA = headA, pB = headB;
while (pA !== pB) {
pA = pA === null ? headB : pA.next;
pB = pB === null ? headA : pB.next;
}
return pA;
};