【Leetcode】【数据结构】【C语言】判断两个链表是否相交并返回交点地址

c 复制代码
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
    struct ListNode *tailA=headA;
    struct ListNode *tailB=headB;
    int count1=0;
    int count2=0;
    //分别找尾节点,并顺便统计节点数量:
    while(tailA)
    {
        tailA=tailA->next;
        count1++;
    }
    while(tailB)
    {
        tailB=tailB->next;
        count2++;
    }
    if(tailA!=tailB)//如果尾节点不相同,则一定不相交
    return NULL;
    int tmp=abs(count1-count2);//得到两个数量差值的绝对值
    struct ListNode*longList=headA;
     struct ListNode*shortList=headB;
     //找出长的链表:
     if(count2>count1)
     {
         longList=headB;
         shortList=headA;
     }
     //先让长的链表走差值步,再和短链表齐头并进
     while(tmp)
     {
         longList=longList->next;
         tmp--;
     }
     //两个链表齐头并进:
     while(longList!=shortList)
     {
         shortList=shortList->next;
         longList=longList->next;
     }
     //两个链表相遇的地方就是节点
     return longList;
}
相关推荐
数智工坊8 分钟前
【UniT论文阅读】:用统一物理语言打通人类与人形机器人的知识壁垒
论文阅读·人工智能·深度学习·算法·机器人
ABAP 成8 分钟前
删除+新增原始BOM工序+订单BOM+工序笔记
笔记
梓䈑10 分钟前
【算法题攻略】模拟
c++·算法
Evand J13 分钟前
【课题推荐与代码介绍】卡尔曼滤波器正反向估计算法原理与MATLAB实现
开发语言·算法·matlab
XS03010614 分钟前
MyBatis基础实战笔记一
笔记·mybatis
DFT计算杂谈16 分钟前
VASP新手入门: IVDW 色散修正参数
linux·运维·服务器·python·算法
Oll Correct22 分钟前
实验二十五:从IPv4向IPv6过渡所使用的隧道技术
网络·笔记
Chen_harmony31 分钟前
【习题02】打印菱形
c语言
吃着火锅x唱着歌32 分钟前
LeetCode 962.最大宽度坡
算法·leetcode·职场和发展
无限进步_42 分钟前
【C++】C++11的类功能增强与STL变化
java·前端·数据结构·c++·后端·算法