我是靠谱客的博主 悦耳薯片,最近开发中收集的这篇文章主要介绍链表 寻找2个链表的第一个公共节点,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

思路:由于从某个节点开始2个链表相交,那么之后的节点完全一样

先求出2个连表长度  先使得长的链表  先走差值的长度

然后2个指针并排前进,并判断是否相等,若相等即为第一个公共节点

(需要注意 NULL的情况)

class Solution {
public:
    ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
        
        int len1=getLength(pHead1);
        int len2=getLength(pHead2);
        if(len1==0 || len2==0)
            return NULL;
        if(len1>len2) //那么pHead1先走len1-len2步
        {
            for(int i=0;i<len1-len2;i++)
                pHead1=pHead1->next;
        }
        else{
            for(int i=0;i<len2-len1;i++)
                pHead2=pHead2->next;
        }
        //在2个指针并排前行,直到遇到相等
        while(pHead1!=pHead2 && pHead1 && pHead2)
        {
            pHead1=pHead1->next;
            pHead2=pHead2->next;
        }
        return pHead1;
        
        
        
        
    }
    
    int getLength(ListNode* ptr)
    {
        if(ptr==NULL)
            return 0;
        int count=0;
        while(ptr->next!=NULL)
        {
            ptr=ptr->next;
            count++;
        }
        return count;  
        
    }
};

 

最后

以上就是悦耳薯片为你收集整理的链表 寻找2个链表的第一个公共节点的全部内容,希望文章能够帮你解决链表 寻找2个链表的第一个公共节点所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部