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
/*
* 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
}
}
}