/*
 * function ListNode(x){
 *   this.val = x;
 *   this.next = null;
 * }
 */

/**
  * 
  * @param head ListNode类 
  * @param n int整型 
  * @return ListNode类
  */
function removeNthFromEnd( head ,  n ) {
//     防止删除的第一位
    let tHead = new ListNode(null);
    tHead.next = head;
    let slow = tHead, fast = tHead;
    while(n > 0 && fast) {
        fast = fast.next;
        n--;
    }
    // 提前移动fast指针,
    //倒数第n个需要fast走n下,他的前面一个需要fast走n+1下,因为是倒数n+1下是slow的precessor
    fast = fast.next;
    while(fast) {
        fast = fast.next;
        slow = slow.next;
    }

    slow.next = slow.next.next;

    // 如果链表不够长,则直接返回链表
    return tHead.next;
};
module.exports = {
    removeNthFromEnd : removeNthFromEnd
};