Given the head of a singly linked list, reverse the list, and return the new head node. The linked list is defined as follows:
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
Example 1:
Input: head = [1, 2, 3, 4, 5]
Output: [5, 4, 3, 2, 1]
Example 2:
Input: head = [1, 2]
Output: [2, 1]
-5000 <= Node.val <= 5000.head = [1, 2, 3, 4, 5]Output[5, 4, 3, 2, 1]WhyReversing the list changes the order of nodes from 1 -> 2 -> 3 -> 4 -> 5 to 5 -> 4 -> 3 -> 2 -> 1.head = [1, 2]Output[2, 1]WhyThe list has two nodes; reversing them swaps their positions.0 <= number of nodes <= 5000-5000 <= Node.val <= 5000def reverse_list(head: Optional[ListNode]) -> Optional[ListNode]: