class Solution { public: ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) { if(!pHead1 || !pHead2) return nullptr; int len=0; for(ListNode* cur = pHead1 ; cur!=nullptr ; cur = cur->next) { ++len; } for(ListNode* cur = pHead2 ; cur ; cur = cur->next) { --len; } ListNode* cur1, *cur2; cur1 = len>0 ? pHead1 : pHead2; cur2 = (cur1==pHead1) ? pHead2 : pHead1; len = len>0 ? len : -len; while(len--) { cur1 = cur1->next; } while(cur1 != cur2) { cur1 = cur1->next; cur2 = cur2->next; } return cur1; } };