遍历两表求差值,谁更长谁先走,走过差值一起走,相遇即是第一公共点。
struct ListNode* FindFirstCommonNode(struct ListNode* pHead1, struct ListNode* pHead2 )
{
  int len1 = 0,len2 = 0;
  struct ListNode* p1 = pHead1;
  struct ListNode* p2 = pHead2;
  for(; p1 != NULL; len1++)    p1 = p1->next;   //求len1
  for(; p2 != NULL; len2++)    p2 = p2->next;   //求len2
  if(len1 == 0 || len2 == 0)   
      return NULL;   //某一个链表为空,肯定没公共点,两个都空的话,就一起空呗
  else if (len1 >= len2){    //若链表1更长
     int dis = len1 - len2;   //求链表长度差
     while (dis > 0){
          pHead1 = pHead1->next;
          dis--;
            }      //长表先走,走到从该点开始的长度与短表相同时停下
  }
  else{            //链表2更长,情况同上
       int dis = len2 - len1;
       while (dis > 0){
             pHead2 = pHead2->next;
             dis--;
            }
      }       //长表先走,走到从该点开始的长度与短表相同时停下
  while(pHead1 != pHead2){     //两表一起走,相遇时停下 
          pHead1 = pHead1->next;
          pHead2 = pHead2->next;
        }
  return pHead1;        //当然,return pHead2也可以
 }