ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

链表 寻找2个链表的第一个公共节点

2019-02-26 18:49:26  阅读:171  来源: 互联网

标签:int ptr 链表 len2 pHead1 pHead2 公共 节点


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

思路:由于从某个节点开始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;  
        
    }
};

 

标签:int,ptr,链表,len2,pHead1,pHead2,公共,节点
来源: https://blog.csdn.net/qq_33369979/article/details/87941608

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有