//参数为对应的头节点
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
if (headA == null || headB == null){
return null;
}
int headALength = 0; //A链表的长度
int headBLength = 0; //B链表的长度
ListNode pL = headA; //pL代表最长,ps代表短的
ListNode pS = headB;
while(pL != null){
headALength++;
pL=pL.next;
}
while(pS != null){
headBLength++;
pS=pS.next;
}
pL = headA;
pS = headB;
int myLen = headALength - headBLength;
if(myLen< 0){
pL = headB;
pS = headA;
myLen = headBLength - headALength;
}
//2.让长的单链表走长度的差值
for (int i = 0; i < myLen; i++) {
pL = pL.next;
}
//3.一人一步走
while(pL != null && pS != null && pL !=pS ){
pL = pL.next;
pS = pS.next;
}
if (pL == pS && pL != null && pS != null){
return pL;
}
return null;
}