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:
sz
.1 <= sz <= 30
0 <= Node.val <= 100
1 <= n <= sz
Follow up: Could you do this in one pass?
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
}
}
}