美文网首页数据结构与算法整理
链表-查找两个链表的公共节点

链表-查找两个链表的公共节点

作者: 茶还是咖啡 | 来源:发表于2020-03-05 08:15 被阅读0次

    两个链表相交,查找两个链表的公共节点

    eg:
    两个链表分别是:
    L1: 1->1->2->3->5->4->5
    L2: 1->2->3->4->5
    公共节点为4


    链表L1的长度为7,链表L2的长度为5,L1先走7-5=2个节点后,两个链表同步移动,那么第一个相同地址的节点即为相交节点。

    code

    int findFirstCommonNode(ElemSN *h1,ElemSN *h2){
        if(h1==NULL||h2==NULL){
            return -1;
        }
        int l1 = 0,l2 = 0;
        while(h1!=NULL||h2!=NULL){
            if(h1!=NULL){
                l1++;
                h1 = h1->next;
            }
            if(h2!=NULL){
                l2++;
                h2 = h2->next;
            }
        }
        int n = l1-l2;
        while (n!=0) {
            if(n>0){
                n--;
                h1=h1->next;
            }else{
                n++;
                h2=h2->next;
            }
        }
        // 此时两个链表的长度一致,所以合法性只需要判断任意一个就可以
        // 如果两个链表的节点地址想同,说明该节点即为第一个公共节点
        while (h1!=NULL&&h1!=h2) {
            h1 = h1->next;
            h2 = h2->next;
        }
        // 说明两个链表没有公共节点
        if(h1==NULL){
            return -1;
        }
        return h1->data;
    }
    
    

    相关文章

      网友评论

        本文标题:链表-查找两个链表的公共节点

        本文链接:https://www.haomeiwen.com/subject/lafplhtx.html