/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
      //任一链表为null,返回null
        if(pHead1==null||pHead2==null)return null;
      
      
      //定义两个指针分别指向两个链表头节点  
        ListNode p1=pHead1;
        ListNode p2=pHead2;
        
        
      //进入循环,每个指针都走过两个链表节点总数的路程
      //如果存在两个指针相等,第一种是存在公共节点,第二种是走完路程,无公共节点,都指向null
      //两种情况都需要终止循环,因此判断p1、p2相等时,break
        while(p1!=p2){
            p1=p1.next;
            p2=p2.next;
          
            if(p1==p2)break;
            
            if(p1==null){
                p1=pHead2;
            }
            if(p2==null){
                p2=pHead1;
            }
        }
        
      //返回p1或p2
        return p1;
    }
}