Given the head of a singly linked list, reverse the list in place and return the new head. Do not create a second list or use extra nodes to store the result.
Implement a function that takes the head node of a singly linked list and returns the head node of the reversed list. Each node has two fields: val and next.
def reverse_linked_list(head):