Given the head of a singly linked list, reverse the list, and return the reversed list.
Iterative Pointers Reassignment
To reverse a singly linked list, we iterate through the list and for each node, point its `next` to the previous node. We need three pointers: `curr` (current node), `prev` (previous node, initially None), and `next` (temporary to store the rest of the list before breaking the connection).