LeetCode 160. Intersection of Two Linked Lists

来源:互联网 发布:ubuntu开机花屏 编辑:程序博客网 时间:2024/04/20 02:48

Write a program to find the node at which the intersection of two singly linked lists begins.


For example, the following two linked lists:

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

begin to intersect at node c1.


Two pointers for Linked List.

 ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {        if(!headA || !headB) return NULL;        int lengthA = 0;        int lengthB = 0;        ListNode* l1 = headA;        ListNode* l2 = headB;        while(l1) {            lengthA++;            l1 = l1->next;        }        while(l2) {            lengthB++;            l2 = l2->next;        }        int diff = abs(lengthA - lengthB);        ListNode* longer = lengthA > lengthB ? headA : headB;        ListNode* shorter = lengthA > lengthB ? headB : headA;        while(diff > 0) {            longer = longer->next;            diff--;        }        while(longer && shorter) {            if(longer == shorter) return longer;            longer = longer->next;            shorter = shorter->next;        }        return NULL;    }


0 0
原创粉丝点击