/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func oddEvenList(head *ListNode) *ListNode {
	if head == nil || head.Next == nil {
		return head
	}
	odd, even := head, head.Next
	prev, slow, fast := odd, odd, even
	for fast != nil && slow != nil {
		slow.Next = fast.Next
		if fast.Next != nil {
			fast.Next = fast.Next.Next
		}
		fast = fast.Next
		prev = slow
		slow = slow.Next
	}
	if slow == nil {
		prev.Next = even
	} else {
		slow.Next = even
	}
	return odd
}