题解 | #两个链表的第一个公共结点#
两个链表的第一个公共结点
https://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46
import java.util.*;
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
// 输入两个无环的单向链表,找出它们的第一个公共结点,如果没有公共节点则返回空。
//(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)
int count1 = 0;
int count2 = 0;
ListNode head1 = pHead1;
ListNode head2 = pHead2;
while (head1 != null) {
head1 = head1.next;
count1++;
}
while (head2 != null) {
head2 = head2.next;
count2++;
}
head1 = pHead1;
head2 = pHead2;
int i = 0;
for (i = 0; i < Math.abs(count1 - count2); i++) {
if (count1 > count2) {
head1 = head1.next;
} else {
head2 = head2.next;
}
}
ListNode res = null;
boolean flag = true;
while (head1 != null && head2 != null) {
if (head1 == head2 && res == null) {
res = head1;
}
if (res != null) {
if (head1 != head2) {
flag = false;
break;
}
}
head1 = head1.next;
head2 = head2.next;
}
if (flag) {
return res;
} else {
return null;
}
}
}

