def oddEvenList(head: Optional[ListNode]) -> Optional[ListNode]:
odd, even = ListNode(), ListNode()
saved_odd, saved_even = odd, even
i = 1 # index counter
while head:
# if index is even add to even and move even head
if i % 2 == 0:
even.next = head
even = even.next
else:
# if index is even odd to odd and move odd head
odd.next = head
odd = odd.next
# move head and increase index i
head = head.next
i += 1
even.next = None # set even last element child to None to avoid getting a loop
odd.next = saved_even.next # Group even Linked List at the end of the odd Linked List
return(saved_odd.next)