
/**
* 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) {
if(headA==NULL||headB==NULL)
return NULL;
int lenA = getlen(headA);
int lenB = getlen(headB);
int len = abs(lenA-lenB);
if(lenA>lenB){
while(len--){
headA = headA->next;
}
}else if(lenA<lenB){
while(len--)
headB = headB->next;
}
while(headA&&headB&&headA!=headB){
headA = headA->next;
headB = headB->next;
}
return headA;
}
int getlen(ListNode* root){
int count = 0;
if(root==NULL)
return count;
while(root){
count++;
root= root->next;
}
return count;
}
};