Given the head of a singly linked list, return the middle node. If the list has an even number of nodes (two middles), return the second middle.
This is the classic slow/fast pointer warmup — advance slow by one and fast by two; when fast falls off, slow is at the middle.
[1, 10⁴].1 ≤ Node.val ≤ 10⁴Use two pointers; slow moves one step, fast moves two steps per iteration.