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)