Write a program to find the node at which the intersection of two singly linked lists begins.
The following two linked lists:
A: a1 → a2
↘
c1 → c2 → c3
↗
B: b1 → b2 → b3
begin to intersect at node c1.
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
/**
* @param headA: the first list
* @param headB: the second list
* @return: a ListNode
*/
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
int a = 0, b = 0;
ListNode t1 = headA, t2 = headB;
while(t1 != null) {
a++;
t1 = t1.next;
}
while(t2 != null) {
b++;
t2 = t2.next;
}
t1 = headA;
t2 = headB;
if(a > b) {
while(a-- > b) t1 = t1.next;
}else if(a < b) {
while(b-- > a) t2 = t2.next;
}
while(t1!= null && t2 != null) {
if(t1 == t2) return t1;
else {
t1 = t1.next;
t2 = t2.next;
}
}
return null;
}
}