- 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