160. Intersection of Two Linked Lists

来源:互联网 发布:搜款网广州网络批发1 编辑:程序博客网 时间:2024/06/03 15:50

这里写图片描述
若是两个相同长度的链表则对比相应位置处的地址则可以得到交集。先求出两个链表的长度,再求出差值,将长的去掉差值个元素再比较相应位置的元素。

    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {        int len1=0,len2=0;        ListNode*l1=headA,*l2=headB;        if(!headA||!headB)            return null;        while(l1){            l1=l1->next;            len1++;        }        while(l2){            l2=l2->next;            len2++;        }        int gap=len1-len2;        if(gap>0){            while(gap--)                headA=headA->next;        }else{            while(-(gap++)>0)                headB=headB->next;        }        while(headA){            if(headA==headB)                return headA;            headA=headA->next;            headB=headB->next;        }        return NULL;    }

int型的全局变量会初始化为0,局部变量会任意分陪一个。

 ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {        ListNode*l1=headA,*l2=headB;    if(!l1||!l2) return NULL;    // if()       while(l1!=l2){           if(!l1)           {               l1=headB;               continue;           }           if(!l2)           {                l2=headA;               continue;           }           l1=l1->next;           l2=l2->next;       }        return l1;    }
 ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {        ListNode*l1=headA,*l2=headB;    if(!l1||!l2) return NULL;    // if()       while(l1!=l2){       l1=l1?l1->next:headB;         l2=l2?l2->next:headA;         }        return l1;    }
原创粉丝点击