An EPAM Systems data-processing component stores an ordered sequence as a singly linked list. Given the list head, reverse the list in place by changing node pointers, then return the new head.
The input is head, either None or a reference to a ListNode with integer field val and pointer field next. The evaluator supplies the ListNode implementation. Return a reference to the new head after every next pointer has been reversed. Do not create replacement nodes or use an array to rebuild the list.
For test cases below, a JSON array represents the linked list's values. The expected result is the value sequence obtained by traversing the returned head.
def reverse_linked_list(head):