思路:
(1)分别扫描两个链表,获取二者的长度;
(2)设定两个指针分别指向两个链表;
(3)获得长度差值delta,让较长的链表对应的遍历指针先走delta步,此时两个指针位于同步;
(4)两个指针同步前进,判断相等,即为answer。
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
if(pHead1==null||pHead2==null) return null;
//变量区
int length1=0,length2=0,deltaLength=0;
ListNode pointer1=pHead1,pointer2=pHead2;
//计算长度
while(pointer1!=null) {
length1++;
pointer1=pointer1.next;
}
while(pointer2!=null) {
length2++;
pointer2=pointer2.next;
}
deltaLength=Math.abs(length1-length2);
//指针同步
pointer1=pHead1;
pointer2=pHead2;
if(length1>length2){
while(deltaLength-->0){
pointer1=pointer1.next;
}
}
if(length2>length1){
while(deltaLength-->0){
pointer2=pointer2.next;
}
}
//同步移动,寻找公共结点
while(pointer1!=null&&pointer2!=null){
if(pointer1==pointer2){
return pointer1;
}
pointer1=pointer1.next;
pointer2=pointer2.next;
}
return null;
}