Remove Nth Node From End of List

Problem Description

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 (JavaScript)

/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */
/**
 * @param {ListNode} head
 * @param {number} n
 * @return {ListNode}
 */
var removeNthFromEnd = function(head, n) {
    function getNode(h, m) {
        var rst = h;
        while(m > 0) {
            rst = rst.next;
            m--;
        }
        return rst;
    }
    
    var l = head;
    var r = getNode(head, n);
    if (!r) return head.next;
    
    while(r.next) {
        r = r.next;
        l = l.next;
    }
    l.next = l.next.next;
    
    return head;
};