LeetCode-in-Scala.github.io

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

/*
 * Definition for singly-linked list.
 * class ListNode(_x: Int = 0, _next: ListNode = null) {
 *   var next: ListNode = _next
 *   var x: Int = _x
 * }
 */
object Solution {
    private var n: Int = 0

    def removeNthFromEnd(head: ListNode, n: Int): ListNode = {
        this.n = n
        val node = new ListNode(0, head)
        removeNth(node)
        node.next
    }

    private def removeNth(node: ListNode): Unit = {
        if (node.next == null) {
            return
        }
        removeNth(node.next)
        n -= 1

        if (n == 0) {
            node.next = node.next.next
        }
    }
}