LeetCode in Kotlin

19. Remove Nth Node From End of List

Medium

Given the head of a linked list, remove the nth node from the end of the list and return its head.

Example 1:

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

Output: [1,2,3,5]

Example 2:

Input: head = [1], n = 1

Output: []

Example 3:

Input: head = [1,2], n = 1

Output: [1]

Constraints:

Follow up: Could you do this in one pass?

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 {
    private var n = 0

    fun removeNthFromEnd(head: ListNode?, n: Int): ListNode? {
        this.n = n
        val node = ListNode(0, head)
        removeNth(node)
        return node.next
    }

    private fun removeNth(node: ListNode?) {
        if (node?.next == null) {
            return
        }
        removeNth(node.next)
        n--
        if (n == 0) {
            node.next = node.next?.next
        }
    }
}