160. Intersection of Two Linked Lists

来源:互联网 发布:免费网络宣传 编辑:程序博客网 时间:2024/05/26 08:42

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.

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {        int lenA = 1, lenB = 1;        ListNode* newHeadA = headA;        ListNode* newHeadB = headB;        while(headA != NULL && headA->next != NULL){            headA = headA->next;            ++lenA;        }        while(headB != NULL && headB->next != NULL){            headB = headB->next;            ++lenB;        }        if(headA != headB)  return NULL;        while(lenA > lenB){            newHeadA = newHeadA->next;            --lenA;        }        while(lenB > lenA){            newHeadB = newHeadB->next;            --lenB;        }        while(newHeadA != newHeadB){            newHeadA = newHeadA->next;            newHeadB = newHeadB->next;        }        return newHeadA;    }};
0 0
原创粉丝点击