LeetCode题解:160.相交链表

设计链表

一、LeetCode题解

瞧一瞧~

二、算法题

题目

给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。如果有环,则确定它的入口位置。

注意:

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

解法一(双指针)

思路
  • 定义A、B节点对应headA、headB链表
  • 如果两个链表相交,那么他们的共同点就是相交节点及以后的节点相等;
  • 在未知长度的链表中,为了保证两个节点走相同的路程。
    • A节点走完后,走B节点,假设A链表交点前的节点数尾a
    • B节点走完后,走A节点,假设A链表交点前的节点数尾b
    • 如果存在交点:A和B在相遇前都走了 a+共同节点+b,此时A === B
代码
var getIntersectionNode = function(headA, headB) {
    var A = headA
    var B = headB
    while(A || B){
        if(A === B) return A
        A = A ? A.next : headB
        B = B ? B.next : headA
    }
    return null
};
结果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/jbj6568839z/article/details/105955671