/*
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;
}
int c1 = 0;
int c2 = 0;
ListNode temp1 = pHead1;
ListNode temp2 = pHead2;
//公共部分等长,所以先保证从两链表等长的地方开始
while (temp1 != null) {
c1++;
temp1 = temp1.next;
}
while (temp2 != null) {
c2++;
temp2 = temp2.next;
}
int diff = 0;
if (c1 >= c2) {
diff = c1 - c2;
while (diff-->0) {
pHead1 = pHead1.next;
}
} else {
diff = c2 - c1;
while (diff-->0) {
pHead2 = pHead2.next;
}
}
//找公共节点
while (pHead1 != null && pHead2 != null) {
if (pHead1 == pHead2) {
return pHead1;
}
pHead1 = pHead1.next;
pHead2 = pHead2.next;
}
return null;
}
}