Middle of the Linked List
Problem
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
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} head
* @return {ListNode}
*/
var middleNode = function(head) {
let slow = head;
let fast = head;
while (fast?.next) {
fast = fast.next?.next;
slow = slow.next;
}
return slow;
};
We will use a fast pointer fast
, and a slow pointer slow
, to find the middle of the linked list. More specifically, since fast
moves at two nodes at a time and slow
moves at one node at a time, when fast
reaches the end of the list, slow
should be exactly at the half way point of the list (or the second middle node if the list is even in length).