import java.util.*;
class GFG {
static class Node {
int data;
Node next;
};
static Node intersectPoint(Node headA, Node headB)
{
Stack<Node> stackA = new Stack<Node>();
Stack<Node> stackB = new Stack<Node>();
Node intersectNode = null;
while (headB != null) {
stackB.push(headB);
headB = headB.next;
}
while (headA != null) {
stackA.push(headA);
headA = headA.next;
}
if (!stackA.peek().equals(stackB.peek())) {
return null;
}
while (!stackA.empty() && !stackB.empty()
&& stackA.peek().equals(stackB.peek())) {
intersectNode = stackA.pop();
stackB.pop();
}
return intersectNode;
}
public static void main(String[] args)
{
Node newNode;
Node head1 = new Node();
head1.data = 10;
Node head2 = new Node();
head2.data = 3;
newNode = new Node();
newNode.data = 6;
head2.next = newNode;
newNode = new Node();
newNode.data = 9;
head2.next.next = newNode;
newNode = new Node();
newNode.data = 15;
head1.next = newNode;
head2.next.next.next = newNode;
newNode = new Node();
newNode.data = 30;
head1.next.next = newNode;
head1.next.next.next = null;
Node intersect_node = null;
intersect_node = intersectPoint(head1, head2);
System.out.print("INTERSECTION POINT: "
+ intersect_node.data);
}
}