博客园  :: 首页  :: 新随笔  :: 订阅 订阅  :: 管理

LeetCode【160】Intersection of Two Linked Lists

Posted on 2015-05-11 17:12  NUST小文  阅读(149)  评论(0编辑  收藏  举报

For example, the following two linked lists:

A:          a1 → a2
                   ↘
                     c1 → c2 → c3
                   ↗            
B:     b1 → b2 → b3

begin to intersect at node c1.

思路比较清晰,首先确定二者的长度并计算长度之差的绝对值dis,让较长链表先走dis步,然后两个指针一起走。如果两个指针相等,则返回,否则当指针达到NULL时,没有交点。

AC代码如下:

    void getLength(ListNode *head , int& len)
    {
        len =0;
        ListNode* h= head;
        while(h)
        {
            h=h->next;
            len++;
        }
    }
    ListNode *getInsersection(ListNode* headA,ListNode* headB,int lena, int lenb)
    {
        if(!lena || !lenb)
            return NULL;
        //headA and headB are not NULL
        if(lena<lenb)
            return getInsersection(headB,headA,lenb,lena);
        //lena>=lenb
        int dis = lena-lenb;
        ListNode* fir=headA,*sec = headB;
        while(dis)
        {
            fir=fir->next;
            --dis;
        }
        while(fir&&sec)
        {
            if(fir==sec)
                return fir;
            else
            {
                fir = fir->next;
                sec = sec->next;
            }
        }
        return NULL;
        
    }
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        int lena=0,lenb=0;
        getLength(headA,lena);
        getLength(headB,lenb);
        return getInsersection(headA,headB,lena,lenb);
    }