Leetode: 链表相交

题目:
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。

图示两个链表在节点 c1 开始相交:

在这里插入图片描述
题目数据 保证 整个链式结构中不存在环。

注意,函数返回结果后,链表必须 保持其原始结构 。

在这里插入图片描述
思路

A长度为 a, B长度为b, 假设存在交叉点,此时 A到交叉点距离为 c, 而B到交叉点距离为d
后续交叉后长度是一样的,那么就是 a-c = b-d -> a+d = b+c
这里意味着只要分别让A和B额外多走一遍B和A,那么必然会走到交叉,注意这里边缘情况是,大家都走到null依然没交叉,那么正好返回null即可

class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        ListNode*Acur = headA;
        ListNode*Bcur = headB;

        while(Acur != Bcur)
        {
            Acur = Acur != nullptr? Acur->next : headB;
            Bcur = Bcur != nullptr? Bcur->next : headA;
        }
        return Acur;
    }
};
posted @ 2021-10-19 21:21  simonlma  阅读(15)  评论(0)    收藏  举报