public ListNode getIntersectionNode(ListNode headA,ListNode headB){
if (headA == null || headB == null){
return null;
}
ListNode pl = headA; //假设现在单链表A比单链表B长
ListNode ps = headB;
int lenA = 0;
int lenB = 0;
while (pl != null){ //求单链表A长度
lenA++;
pl = pl.next;
}
pl = headA; //不加这一句,pl此时就是null
while (ps != null){ //求单链表B长度
lenB++;
ps = ps.next;
}
ps = headB;
int len = lenA - lenB; //差值步,先让最长的单链表走len步后,两链表再同时走
if (len < 0){ //说明单链表A长度 < B
pl = headB;
ps = headA;
len = lenB - lenA;
}//此时,pl永远指向最长的链表,ps永远指向了最短的链表
while (len != 0 ){ //pl走差值len步
pl = pl.next;
len--;
}
if ( pl != ps ){
pl = pl.next;
ps = ps.next;
}
return pl;
}