LeetCode in Kotlin

328. Odd Even Linked List

Medium

Given the head of a singly linked list, group all the nodes with odd indices together followed by the nodes with even indices, and return the reordered list.

The first node is considered odd, and the second node is even, and so on.

Note that the relative order inside both the even and odd groups should remain as it was in the input.

You must solve the problem in O(1) extra space complexity and O(n) time complexity.

Example 1:

Input: head = [1,2,3,4,5]

Output: [1,3,5,2,4]

Example 2:

Input: head = [2,1,3,5,6,4,7]

Output: [2,3,6,7,1,5,4]

Constraints:

Solution

import com_github_leetcode.ListNode

/*
 * Example:
 * var li = ListNode(5)
 * var v = li.`val`
 * Definition for singly-linked list.
 * class ListNode(var `val`: Int) {
 *     var next: ListNode? = null
 * }
 */
class Solution {
    fun oddEvenList(head: ListNode?): ListNode? {
        val odd = ListNode(0)
        val even = ListNode(0)
        var oddPointer = odd
        var evenPointer = even
        var pointer = head
        var count = 0
        while (pointer != null) {
            if (count % 2 == 0) {
                oddPointer.next = pointer
                oddPointer = oddPointer.next!!
            } else {
                evenPointer.next = pointer
                evenPointer = evenPointer.next!!
            }
            val next = pointer.next
            pointer.next = null
            pointer = next
            count++
        }
        oddPointer.next = even.next
        return odd.next
    }
}