牛客题霸NC66两个链表的第一个公共节点Java题解
https://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?tpId=117&&tqId=34988&rp=1&ru=/ta/job-code-high&qru=/ta/job-code-high/question-ranking
方法:双指针
解题思路:当pHead1==null或pHead2==null时,没有公共节点,返回null。
让node1指向pHead1链表的头节点,node2指向pHead2链表的头节点。然后依次判断每个节点是否相等。当node1到达链表pHead1的末尾时,重新定位到链表pHead2的头节点,当node2到达链表pHead2的末尾时,重新定位到链表pHead1的头节点。这样,当node1和node2相遇时,所指向的节点就是第一个公共节点。

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

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
        if(pHead1==null || pHead2==null){
            return null;
        }

        ListNode node1 = pHead1;   //node1指向pHead1头节点
        ListNode node2 = pHead2;   //node2指向pHead2头节点

        while(node1!=node2){       //如果node1不等于node2
            node1 = node1!=null?node1.next:pHead2;  //当node1到达链表pHead1的末尾时,重新定位到链表pHead2的头节点
            node2 = node2!=null?node2.next:pHead1;  //当node2到达链表pHead2的末尾时,重新定位到链表pHead1的头节点
        }

        return node1;    //当node1和node2相遇时,所指向的节点就是第一个公共节点
    }
}