先各遍历一次看是不是交于同一node,顺便记录2个链子的长度。
然后根据长度差距再遍历找到交点。。
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
if (headA == null || headB == null) return null;
ListNode dum1 = new ListNode(0);
ListNode dum2 = new ListNode(0);
dum1.next = headA;
dum2.next = headB;
int count1 = 0;
int count2 = 0;
ListNode temp1 = dum1;
while (temp1.next != null) {
count1++;
temp1 = temp1.next;
}
ListNode temp2 = dum2;
while (temp2.next != null) {
count2++;
temp2 = temp2.next;
}
if (temp1 != temp2) return null;
if (count1 > count2) {
temp1 = dum1;
temp2 = dum2;
} else {
temp1 = dum2;
temp2 = dum1;
}
int diff = Math.abs(count1 - count2);
while (diff > 0) {
temp1 = temp1.next;
diff--;
}
while (temp1 != temp2) {
temp1 = temp1.next;
temp2 = temp2.next;
}
return temp1;
}
}