题解 | #两个链表的第一个公共结点#

两个链表的第一个公共结点

https://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46

思路:1、分别遍历两个链表,记录两个链表的长度,尾结点相同就是相交,否则就不相交
      2、求第一个交点:长的链表先走(长度差)步,再同时走,第一个相同就是交点

struct ListNode* FindFirstCommonNode(struct ListNode* pHead1, struct ListNode* pHead2 ) {
    struct ListNode* tail1 = pHead1;
    struct ListNode* tail2 = pHead2;
    int len1 = 1;
    int len2 = 1;
    while(tail1)
    {
        tail1 = tail1->next;
        len1++;
    }
    while(tail2)
    {
        tail2 = tail2->next;
        len2++;
    }
    if(tail1 != tail2)
        return NULL;
    int len = abs(len1-len2);
    struct ListNode* longlist = pHead1;
    struct ListNode* shortlist = pHead2;
    if(len1 < len2)
    {
        longlist = pHead2;
        shortlist = pHead1;
    }
    while(len--)
    {
        longlist = longlist->next;
    }
    while(longlist != shortlist)
    {
        longlist = longlist->next;
        shortlist = shortlist->next;
    }
    return longlist;
}

全部评论

相关推荐

11-15 17:19
湖南大学 Java
成果成果成果果:这是哪个公司的hr,这么离谱吗,我没见过用性别卡技术岗的,身边女性同学拿大厂offer的比比皆是
点赞 评论 收藏
分享
头像
昨天 14:28
长沙理工大学
刷算法真的是提升代码能力最快的方法吗?&nbsp;刷算法真的是提升代码能力最快的方法吗?
牛牛不会牛泪:看你想提升什么,代码能力太宽泛了,是想提升算法能力还是工程能力? 工程能力做项目找实习,算法也分数据结构算法题和深度学习之类算法
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务