/**
* 思路:如果有公共节点,1)若两个链表长度相等,那么遍历一遍后,在某个时刻,p1 == p2
* 2)若两个链表长度不相等,那么短的那个链表的指针pn(也就是p1或p2)
* 必先为null,那么这时再另pn = 链表头节点。经过一段时间后,
* 则一定会出现p1 == p2。
* 如果没有公共节点:这种情况可以看成是公共节点为null,顾不用再考虑。
* */
public class FindFirstCommonNodeSolution {
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
ListNode p1 = pHead1;
ListNode p2 = pHead2;
while(p1 != p2) {
if(p1 != null) p1 = p1.next; //防止空指针异常
if(p2 != null) p2 = p2.next;
if(p1 != p2) {//当两个链表长度不想等
if(p1 == null) p1 = pHead1;
if(p2 == null) p2 = pHead2;
}
}
return p1;
}
}