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

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

分析:先计算两个链表长度,让长的那个先走差距步,然后一起走,相遇时就是答案。

ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
        if(pHead1==nullptr || pHead2==nullptr)
            return nullptr;
        
        //计算两个链表的长度
        ListNode* cur1=pHead1;
        ListNode* cur2=pHead2;
        int count1=0;
        int count2=0;
        
        while(cur1)
        {
            count1++;
            cur1=cur1->next;
        }
         while(cur2)
        {
            count2++;
            cur2=cur2->next;
        }
        
        ListNode* Long=pHead1;
        ListNode* Short=pHead2;
        
        if(count1<count2)
        {
            Long=pHead2;
            Short=pHead1;
        }
        
        //长的链表先走差距步
        int div=abs(count1-count2);
        while(div--)
        {
            Long=Long->next;
        }
        
        //一起走
        while(Long!=Short)
        {
            Long=Long->next;
            Short=Short->next;
        }
        //来到这说明两个相遇了
        return Long;
    }

 

全部评论

相关推荐

我已成为0offer的糕手:别惯着,胆子都是练出来的,这里认怂了,那以后被裁应届被拖工资还敢抗争?
点赞 评论 收藏
分享
吃不饱的肱二头肌很想退休:tnnd 我以为选妹子呢,亏我兴高采烈的冲进来😠
投递快手等公司10个岗位
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务