Assume the length of the intersection part is x, length of list a l1, and length of list b is l2.
Then l1 + l2 = l2 + l1 => l1 + l2 - x = l2 + l1 - x.
If tow lists have no intersection, then two pointers will run through list1 and list2, and stop at the end of two lists.
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
if(headA == null || headB == null) {
return null;
}
ListNode a = headA;
ListNode b = headB;
while (a != b) {
a = (a == null) ? headB : a.next; // when a reaches end, start a from b
b = (b == null) ? headA : b.next; // when b reaches end, start a from a
}
return a;
}
}