/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* FindFirstCommonNode( ListNode *pHead1, ListNode *pHead2) {
ListNode * p1 = pHead1, *p2 = pHead2;
while(p1 && p2){
p1 = p1->next;
p2 = p2->next;
}
ListNode * helper = NULL;
if(p1 == NULL && p2 == NULL)
p1 = pHead1, p2 = pHead2;
else if(p1){
helper = pHead1;
while(p1){
p1 = p1->next;
helper = helper->next;
}
p1 = helper;
p2 = pHead2;
}else{
helper = pHead2;
while(p2){
p2 = p2->next;
helper = helper->next;
}
p1 = pHead1;
p2 = helper;
}
while(p1 != NULL && p2 != NULL && p1 != p2){
p1 = p1->next;
p2 = p2->next;
}
return p1;
}
};