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.
Example: [1,2,3,4,5] → 3 (returns the node with value 3 and its tail [3,4,5]). [1,2,3,4,5,6] → 4 (second middle, tail [4,5,6]).
[3,4,5]