题目链接
算出两个链表长度的差值,让长链表的指针先走差值个结点,然后遍历相同点即为相交点。
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
int cnt1 = 0 ,cnt2 = 0;
ListNode p1 = headA ,p2 = headB;
while (p1 != null || p2 != null){//计算两个链表长度
if (p1 != null) {
cnt1++;
p1 = p1.next;
}
if (p2 != null) {
cnt2++;
p2 = p2.next;
}
}
p1 = headA;
p2 = headB;
//长链表先走差值个结点
if (cnt1 >cnt2){
for (int i = 0; i < cnt1-cnt2; i++)
p1 = p1.next;
}else {
for (int i = 0; i < cnt2-cnt1; i++)
p2 = p2.next;
}
while (p1 != null){//相遇时就是相交点
if (p1 == p2) return p1;
p1 = p1.next;
p2 = p2.next;
}
return null;
}