面试题 37 两个链表的第一个公共节点

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;
	
}
原文地址:https://www.cnblogs.com/graph/p/3326499.html