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

博客介绍了求两个链表公共节点的思路,先遍历两链表求出长度及长度差,让长链表先走长度差步数,之后两链表同时走,当节点相等时即为公共节点,还提及会给出代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

思路:

  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;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值