/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
/**
* 解题思路:公共结点后面的链表是一致的。
* 所区别点在于公共结点之前的链表长度,如果长度相同,那可以走到同一个结点。问题在于公共结点前的链表长度不一致的情况,比如长度差异k
* 这里将短链表走到尾之后,指向长链表,这样就可以在长链表走到尾之前先走k步
* 而长链表走到尾之后,将其指向锻炼表,这样两者在抵达公共结点前的长度就一致了。
**/
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
if(pHead1 == null || pHead2 == null) {
return null;
}
ListNode node1 = pHead1;
ListNode node2 = pHead2;
while(node1 != node2) {
node1 = node1.next;
node2 = node2.next;
if(node1 == node2) {
break;
}
//让更短的链表走到尾后切换为更长的链表先走
if(node1 == null) {
node1 = pHead2;
}
if(node2 == null) {
node2 = pHead1;
}
}
return node1;
}
}