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

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

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

//思路 先求出两个链表的长度,然后让长的链表先走二者长度的差值

//再让两个链表一起移动,如果出现相等的情况,则说明满足条件,返回该节点

//否则当其中一个节点为空时,说明不满足条件,则返回NULL

//思路 先求出两个链表的长度,然后让长的链表先走二者长度的差值
 //再让两个链表一起移动,如果出现相等的情况,则说明满足条件,返回该节点
 //否则当其中一个节点为空时,说明不满足条件,则返回NULL
struct ListNode* FindFirstCommonNode(struct ListNode* pHead1, struct ListNode* pHead2 ) {
    // write code here
    struct ListNode* p1=pHead1;
    struct ListNode* p2=pHead2;
    int leng1=0;
    int leng2=0;
    while(p1)
    {
        p1=p1->next;
        leng1++;
    }
    while(p2)
    {
        p2=p2->next;
        leng2++;
    }
    struct ListNode* longlist=pHead1;
    struct ListNode* shortlist=pHead2;
    if(leng1<leng2)
    {
        longlist=pHead2;
        shortlist=pHead1;
    }
    int ret=abs(leng1-leng2);
    while(ret--)
    {
        longlist=longlist->next;
    }
    while(longlist)//当其中一个链表为空时
    {
        if(shortlist==longlist)
        {
            return longlist;
        }
        longlist=longlist->next;
        shortlist=shortlist->next;
    }
    return NULL;
}

全部评论

相关推荐

我见java多妩媚:大外包
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务