- Given two single linked lists, find out the intersection point of two single linked lists.
- Traverse the single linked lists using non recursive or iterative algorithm.
- Suppose, we have two linked lists and they meets at certain point
- then, we would like to find out the meeting or join point.
- We have shown two single linked lists, Linked list 1 and linked list 2 in Fig 1.
- Both linked lists are intersected at node 50.
- As per our problem statement, we are interested in Node 50, where two linked lists intersects or joins together.

- Let us analyze the single linked lists shown in Fig 1
- Both single linked lists are joined together at node 50
- All the nodes after node 50 are common in both linked list (shown in green color).
- The nodes prior to node 50 differ in both the list i.e. length (or/and data) of lists varies prior to node 50.
- If we can able to find out the difference in length, prior to node 50, then we can figure out the join point of linked lists.
Algorithm – find intersection or join point of two single linked lists in java
- Find out the length of single linked list1 & list2
- length of single linked list1 as shown in Fig 1 is 9
- length of linked single linked list2 is 7
- Find out the differences of length of two linked lists
- difference = length of larger list – length of smaller list
- difference = 9 – 7 => 2
- So, we can reduce two nodes from larger linked list (i.e. Linked list 1)
- then Linked list 1 will become equal to Linked list 2
- Move the head pointer of larger list by 2
- We have shown head1 reference shift by 2 in Fig 2
- Now, both head1 (pointing at Node 30) and head2 will travel equal nodes
- i.e Both linked lists will travel 7 nodes
- Compare the address of both nodes during traversal
- Address will be same at Node 50
- So, Node 50 will be join point
- Got the join points of both linked lists
Time complexity of algorithm is O (n).

Program – find intersection or join point of two single linked lists in java
1.) IntersectionPoint Class:
- We are passing head of both single linked lists
- We are finding the join point by calling intersectionPoint method.
package org.learn.Question; import org.learn.List.Node; public class IntersectionPoint { public static Node intersectionPoint(Node head1, Node head2) { int length1 = length(head1); int length2 = length(head2); Node largerList = null ; Node smallerList = null ; if (length1 > length2) { largerList = head1; smallerList = head2; } else { largerList = head2; smallerList = head1; } return getIntersetPoint(largerList, smallerList, Math.abs(length1 - length2)); } private static Node getIntersetPoint(Node largerList,Node smallerList, int lengthDifference) { int count = 0 ; while (count++ < lengthDifference) { largerList = largerList.next; } while (largerList != null && smallerList != null ) { if (largerList == smallerList) return largerList; largerList = largerList.next; smallerList = smallerList.next; } return null ; } public static int length(Node head) { int length = 0 ; while (head != null ) { head = head.next; length++; } return length; } public static Node insert(Node head, int data) { while (head.next != null ) head = head.next; head.next = new Node(data); return head.next; } public static void print(Node head) { while (head != null ) { System.out.printf( "%d " , head.data); head = head.next; } System.out.println( "" ); } } |
2.) App Class:
- We are creating two single linked lists (head1 and head2) in main method.
- We will print single linked lists.
- Finding the join points of Y shaped linked lists
package org.learn.Client; import org.learn.List.Node; import org.learn.Question.IntersectionPoint; public class App { public static void main(String[] args) { // List 1 - 20 25 30 35 40 int [] data1 = { 20 , 25 , 30 , 35 , 40 }; Node head1 = new Node(data1[ 0 ]); Node lastNodeList1 = null ; for ( int count = 1 ; count < data1.length; count++) { lastNodeList1 = IntersectionPoint.insert(head1, data1[count]); } // List 2 - 3 6 9 int [] data2 = { 3 , 6 , 9 }; Node head2 = new Node(data2[ 0 ]); Node lastNodeList2 = null ; for ( int count = 1 ; count < data2.length; count++) { lastNodeList2 = IntersectionPoint.insert(head2, data2[count]); } // Common Nodes - 50 51 52 53 int [] commonData = { 50 , 51 , 52 , 53 }; Node commonList = new Node(commonData[ 0 ]); for ( int count = 1 ; count < commonData.length; count++) { IntersectionPoint.insert(commonList, commonData[count]); } // 20 25 30 35 40 50 51 52 53 lastNodeList1.next = commonList; // 3 6 9 50 51 52 53 lastNodeList2.next = commonList; System.out.println( "1.) Single linked list 1 is :" ); IntersectionPoint.print(head1); System.out.println( "2.) Single linked list 2 is :" ); IntersectionPoint.print(head2); Node intersectNode = IntersectionPoint.intersectionPoint(head1, head2); if ( null != intersectNode) { System.out.printf( "3.) Single linked lists-intersected at: %d" , intersectNode.data); } else { System.out.println( "3.) Single linked lists are not intersected" ); } } } |
3.) Node Class:
- Node class representing the node (s) of single linked lists.
package org.learn.List; public class Node { public int data; public Node next; public Node( int num) { this .data = num; this .next = null ; } } |
Output – intersection or join points of two single linked lists in java
1.) Single linked list 1 is : 20 25 30 35 40 50 51 52 53 2.) Single linked list 2 is : 3 6 9 50 51 52 53 3.) Single linked lists are intersected at: 50 |
Download Code – Intersection / join point of two single linked lists