相交链表/两个链表的第一个公共节点

题目:编写一个程序,找到两个单链表相交的起始节点。

注意:

  • 如果两个链表没有交点,返回 null.
  • 在返回结果后,两个链表仍须保持原有的结构。
  • 可假定整个链表结构中没有循环。
  • 程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。

思路:

  •  如果 A、B 两链表相交,则 A 、B 自相交点往后的链表是一致的。

  • 我们可以尝试消除 A、B 链表的长度差,同步遍历上图中的方框里的节点,判断是否有相同节点,若有相同则是两链表相交,返回第一个相同节点 即可。否则返回 null ,两链表不相交

代码:

 1 /**
 2  * Definition for singly-linked list.
 3  * function ListNode(val) {
 4  *     this.val = val;
 5  *     this.next = null;
 6  * }
 7  */
 8 
 9 /**
10  * @param {ListNode} headA
11  * @param {ListNode} headB
12  * @return {ListNode}
13  */
14 var getIntersectionNode = function(headA, headB) {
15     let n1 = headA
16     let n2 = headB
17     while(n1!=n2){
18         if(n1 === null ){
19             n1 = headB
20         }else{
21             n1 = n1.next
22         }
23         if(n2 === null ){
24             n2 = headA
25         }else{
26             n2 = n2.next
27         }
28     }
29     return n1
30 };

 

posted @ 2021-05-19 20:57  icyyyy  阅读(116)  评论(0)    收藏  举报