Given the head of a singly linked list, reverse the list and return the new head. Implement both an iterative solution and a recursive solution.
Write a function that accepts the head node of a singly linked list. Each node has two fields: val and next. Return the head node of the reversed list. The list may be empty or contain one node.
You should provide two approaches in your solution: one using iteration and one using recursion.
def reverse_list(head):