欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

(三)剑指offer35 两个链表的第一个公共节点

程序员文章站 2022-07-03 19:18:55
...

思路:

  1. 首先遍历两个链表 求出两个链表的长度len1、len2;以及长度差dis;
  2. 让长的为list1 短的为list2; list1 走dis步;
  3. 然后list1 list2 同时走  当list1==list2 的时候找到这个公共节点;

代码:

class Solution {
public:
    ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2)
    {
       if(pHead1==nullptr||!pHead2)
           return nullptr;
        ListNode *p1=pHead1;
        ListNode *p2=pHead2;
        int len1=0,len2=0;
        while(p1)
        {
            len1++;
            p1=p1->next;
        }
        while(p2)
        {
            len2++;
            p2=p2->next;
        }
        int dis=len1-len2;
       if(dis>0)
       {
           p1=pHead1;
           p2=pHead2;
       }
        else 
        {
            dis=0-dis;
            p1=pHead2;
            p2=pHead1;
        }
        while(dis-->0)
            p1=p1->next;
        while(p1&&p2)
        {
            if(p1==p2)
                break;
            p1=p1->next;
            p2=p2->next;
        }
        return p1;
    }
};