/**
* Definition for singly-linked list.
* class ListNode {
* val: number
* next: ListNode | null
* constructor(val?: number, next?: ListNode | null) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
* }
*/
function getIntersectionNode(headA: ListNode | null, headB: ListNode | null): ListNode | null {
let l1 = headA;
let l2 = headB;
while( l1 !== l2 ){
l1 = l1 === null ? headB : l1.next;
l2 = l2 === null ? headA : l2.next;
}
return l1;
};
说明
- 情况1:对于没有交点的两个链表而言,经过一次循环之后l1和l2都变为了null,此时循环结束,表明没有节点
headA: 2-6-4
l1: 2-6-4 + 1-5
l2: 1-5 + 2-6-4
headB: 1-5
- 情况2:有公共节点时,由于l1和l2相加的长度和l2和l1相加的长度相同,经过一次循环之后,最终会再相交节点处相遇
headA: 4-1-8-4-5
l1: 4-1-8-4-5 + 5-0-1-[8-4-5]
l2: 5-0-1-8-4-5 + 4-1-[8-4-5]
headB: 5-0-1-8-4-5
- 情况3:仅有一个节点的val相等时,此时由于该节点的next值不相等,此时不存在相交节点
headA: 4-1-8-3-7
l1: 4-1-8-3-7 + 5-0-1-[8]-4-5
l2: 5-0-1-8-4-5 + 4-1-[8]-3-7
headB: 5-0-1-8-4-5
这种方法可以类推到找数组中的相同子数组
网友评论