目录
题目来源:
实现代码:
思路分析:
题目来源:
LeetCode160题. 相交链表 - 力扣 /牛客网:两个链表的第一个公共结点
题目描述:
![[ 链表OJ题--C语言] 相交链表  两个链表的第一个公共结点_数据结构](https://file.cfanz.cn/uploads/png/2022/05/09/15/PYJeACWUP5.png)
![[ 链表OJ题--C语言] 相交链表  两个链表的第一个公共结点_数据结构_02](https://file.cfanz.cn/uploads/gif/2021/09/18/17/58Y87YaF16.gif)
实现代码:
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
    int lenA = 0;
    int lenB = 0;
    struct ListNode *A = headA;
    struct ListNode *B = headB;
    //求A的长度
    while(headA)
    {
        headA = headA->next;
        lenA++;
    }
    while(headB)
    {
        headB = headB->next;
        lenB++;
    }
    if(lenA<lenB)
    {
        //B 更长
        int k = lenB-lenA;
        while(k--)
        {
            B = B->next;
        }
        while(A&&B)
        {
            if(A == B)
            {
                return A;
            }
            A = A->next;
            B = B->next;
        }
        return NULL;
    }
    else
    {
    //A 更长
    int k = lenA-lenB;
    while(k--)
    {
        A = A->next;
    }
    while(A&&B)
    {
        if(A == B)
        {
            return A;
        }
        A = A->next;
        B = B->next;
    }
    return NULL;  
    }
   return NULL;
}![[ 链表OJ题--C语言] 相交链表  两个链表的第一个公共结点_数据结构_03](https://file.cfanz.cn/uploads/gif/2021/09/18/17/58Y87YaF16.gif)
思路分析:
![[ 链表OJ题--C语言] 相交链表  两个链表的第一个公共结点_数据结构_04](https://file.cfanz.cn/uploads/png/2022/05/09/15/N1X7a72G32.png)
![[ 链表OJ题--C语言] 相交链表  两个链表的第一个公共结点_链表_05](https://file.cfanz.cn/uploads/gif/2021/09/18/17/58Y87YaF16.gif)
思路:首先遍历2个链表求出各链表的长度,再计算两个链表的长度差k,再让长的链表先走k步,此时两个链表的长度相同,一起向后走,如果在遍历结束前,两个指针指向同一块空间说明找到了交点的,如果在遍历结束前都没找到,说明两个链表不相交。
![[ 链表OJ题--C语言] 相交链表  两个链表的第一个公共结点_数据结构_06](https://file.cfanz.cn/uploads/png/2022/05/09/15/4dLVcY8N3e.png)
![[ 链表OJ题--C语言] 相交链表  两个链表的第一个公共结点_数据结构_07](https://file.cfanz.cn/uploads/gif/2021/09/18/17/58Y87YaF16.gif)
![[ 链表OJ题--C语言] 相交链表  两个链表的第一个公共结点_两个指针_08](https://file.cfanz.cn/uploads/png/2022/05/09/15/R1HT1f0NI6.png)
(本题完)










