struct ListNode{ int val; ListNode * next; ListNode(int a):val(a), next(NULL){} }; ListNode *FindFirstCommonNode(ListNode *head1, ListNode *head2){ if(head1 == NULL || head2 == NULL) return NULL; int len1 = getListLength(head1); int len2 = getListLength(head2); int len; ListNode *longer , * smaller; (len1 > len2) ? (longer = head1, smaller = head2, len = len1 - len2): (longer = head2, smaller = head1, len = len2 - len1); while(len > 0) longer = longer->next; while(longer != NULL && longer != smaller){ longer = longer->next; smaller = smaller->next; } return longer; } int getListLength(ListNode * head){ int count = 0; while(head){ ++count; head = head->next; } return count; }