/** * 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 }