Home » Find a Middle of the Linked List – Geekfrisk

Find a Middle of the Linked List – Geekfrisk

In the following article, we are going to check how to find the middle of the Linked List

Given the head of a singly linked list, return the middle node of the linked list.

If there are two middle nodes, return the second middle node.

Example 1:

Input: head = [1,2,3,4,5]
Output: [3,4,5]
Explanation: The middle node of the list is node 3.

Example 2:

Input: head = [1,2,3,4,5,6]
Output: [4,5,6]
Explanation: Since the list has two middle nodes with values 3 and 4, we return the second one.

Constraints:

  • The number of nodes in the list is in the range [1, 100].
  • 1 <= Node.val <= 100

Solution:

We are solving the problem by using a fast pointer and a slow pointer, node_a is a fast pointer and node_b is a slow pointer. We are increasing the fast pointer by two and the slow pointer by one, when the fast pointer is at the end that time slow pointer is the middle.

    public ListNode MiddleNode(ListNode head) {
            ListNode node_a = head;
            ListNode node_b = head;
            while(node_a != null && node_a.next != null)
            {
                node_a = node_a.next.next;
                node_b = node_b.next;
            }
            return node_b;
    }

Complexity Analysis

Time Complexity: O(n)

Space Complexity: O(1)