链表 19.删除链表的倒数第 n个节点

Posted by CodingWithAlice on June 3, 2021

链表 19.删除链表的倒数第 n个节点

力扣 第19题:给定一个链表,删除链表的倒数第 n个节点,并且返回链表的头结点。

示例: 给定一个链表: 1->2->3->4->5, 和 n = 2.

当删除了倒数第二个节点后,链表变为 1->2->3->5.

说明:给定的 n 保证是有效的。

 //Definition for singly - linked list.
  function ListNode(val) {
    this.val = val;
    this.next = null;
  }

var removeNthFromEnd = function (head, n) {
    // 在当前指针前面加一项
    var fake = new ListNode(0);
    fake.next = head;
  
    var length = 0;
    var current = head;
    // 得到长度 - 从 head 开始遍历原链表
    while (current != null) {
      length++;
      current = current.next;
    }
  
    // length-n 后正好是要删除的那个            
    length = length - n;
    var current = fake;
    // length-n-1 后正好是要删除的那个的前一个           
    while (length > 0) {
      length--;
      current = current.next
    }
    // 链表中的删除,只要把前一个指针,跳过当前项,指向下一个即可
    current.next = current.next.next;
  
    return fake.next
};