- Given a single linked list, find midpoint or middle node in a single linked list using java.
- Traverse single linked list using non recursive or iterative algorithm.
- Find midpoint of Single linked list is shown in Fig 1.
- There are five nodes in a single linked list
- So node number 3 is the middle node of single linked list.

Algorithm – find middle or mid point of single linked list in java
- Use two references slow and fast
- slow reference will jump by one node at a time.
- In the above linked list, It will visit 1,2,3,4,5 nodes. i.e. all nodes
- fast reference will jump twice as that of slow reference.
- In above linked list, It will visit nodes number 1, 3 and 5
- fast reference required three jumps to reach to end of list
- slow reference will jump by one node at a time.
- By the time fast reference reached end of list
- slow reference reached middle of linked list
- This is what we are looking for
- slow reference will provide the middle node of single linked list.
- This is what we are looking for
- slow reference reached middle of linked list
Example – midpoint/middle node in single linked list using iterative algorithm
Let us apply above algorithm to single linked list to find middle node (example).
Step 1:
- Create two references slow and fast.
- Both reference pointing to head of linked list as shown in Fig 2.

Step 2:
- slow reference will jump by 1
- slow pointer will reach node number 2
- fast pointer will jump by 2
- fast pointer will reach node number 3
- Refer Fig 3 for reference traversal

Step 3:
- Apply step 2 again.
- slow reference will reach node number 3.
- fast reference will reach node number 5.
- which the end of linked list.
- slow reference will give us middle node of single linked list.
- Refer Fig: 4 for details.

Time complexity of algorithm is O (n).
Program – find middle or midpoint of single linked in java
1.) FindMiddleNode Class:
- FindMiddleNode class is responsible for finding the middle node in a single linked list.
- Traverse the single linked list using iterative algorithm.
package org.learn.Question; import org.learn.List.Node; public class FindMiddleNode { public static Node findMiddleNode(Node head) { if ( null == head) { System.out.println( "Single linked list is empty" ); return null ; } Node slow = head; Node fast = head; while (fast != null && fast.next != null ) { slow = slow.next; fast = fast.next.next; } return slow; } public static void insert(Node head, int data) { while (head.next != null ) head = head.next; head.next = new Node(data); } public static void print(Node head) { while (head != null ) { System.out.printf( "%d " , head.data); head = head.next; } System.out.println( "" ); } } |
2.) Client Class:
- We are creating the single linked list in Client class
- Find the middle node of single linked list, by calling findMiddleNode method of FindMiddleNode class
package org.learn.Client; import org.learn.List.Node; import org.learn.Question.FindMiddleNode; public class Client { public static void main(String[] args) { int [] data = { 1 , 2 , 3 , 4 , 5 }; Node head = new Node(data[ 0 ]); for ( int count = 1 ; count < data.length; count++) FindMiddleNode.insert(head, data[count]); System.out.printf( "1.) Single linked list is : " ); FindMiddleNode.print(head); Node middle = FindMiddleNode.findMiddleNode(head); if ( null != middle) { System.out.printf( "2.) Middle node is at position : %d" , middle.data); } } } |
3.) Node Class:
- Node class is representing the node(s) of single linked list
package org.learn.List; public class Node { public int data; public Node next; public Node( int num) { this .data = num; this .next = null ; } } |
Output – find middle or midpoint of single linked list in java
1.) Single linked list is : 1 2 3 4 5 2.) Middle node is at position : 3 |
Download code – Middle node/midpoint in single linked list java