328.odd-even-linked-list.go 534 B

1234567891011121314151617181920212223242526272829
  1. /**
  2. * Definition for singly-linked list.
  3. * type ListNode struct {
  4. * Val int
  5. * Next *ListNode
  6. * }
  7. */
  8. func oddEvenList(head *ListNode) *ListNode {
  9. if head == nil || head.Next == nil {
  10. return head
  11. }
  12. odd, even := head, head.Next
  13. prev, slow, fast := odd, odd, even
  14. for fast != nil && slow != nil {
  15. slow.Next = fast.Next
  16. if fast.Next != nil {
  17. fast.Next = fast.Next.Next
  18. }
  19. fast = fast.Next
  20. prev = slow
  21. slow = slow.Next
  22. }
  23. if slow == nil {
  24. prev.Next = even
  25. } else {
  26. slow.Next = even
  27. }
  28. return odd
  29. }