剑指offer|两个链表的第一个公共结点

来源:互联网 发布:如何更改mac地址 编辑:程序博客网 时间:2024/05/19 12:23

题目描述

输入两个链表,找出它们的第一个公共结点。

思路:

先分辨遍历两个链表,计算他们的长度,然后用两个指针分别指向两个链表的头结点。并让指向比较长的那个链表指针先往后走k步,k等于两个链表的长度差。,然后两个指针一起往后遍历,直到找到第一个相同的节点。

class Solution {public:    ListNode* FindFirstCommonNode( ListNode *pHead1, ListNode *pHead2) {        if(pHead1 == nullptr || pHead2 == nullptr)            return nullptr;        ListNode* pNode1=pHead1;        int length1=0;        while(pNode1)        {            ++length1;            pNode1=pNode1->next;        }        ListNode* pNode2=pHead2;        int length2=0;        while(pNode2)        {            ++length2;            pNode2=pNode2->next;        }        pNode1=pHead1;        pNode2=pHead2;        int diff=0;        if(length1>length2)        {            diff=length1-length2;            while(diff>0)            {                --diff;                pNode1=pNode1->next;            }        }        else        {            diff=length2-length1;            while(diff>0)            {                --diff;                pNode2=pNode2->next;            }        }        while(pNode1 != nullptr)        {            if(pNode1==pNode2)                return pNode1;            pNode1=pNode1->next;            pNode2=pNode2->next;        }        return pNode1;    }};
0 0
原创粉丝点击