LeetCode刷题,删除链表的倒数第N个节点(19)

1,628 阅读1分钟

删除链表的倒数第N个节点

给你一个链表,删除倒数第N个节点,返回链表头节点

解题代码

思路:使用双指针法,一个指针先往后走n步,然后两个指针同时走。直到先走了n步的节点走到链表结尾时,这时另外一个指针距离尾节点的距离就是n。

var removeNthFromEnd = function(head, n) {
  if (!head) return null;
  let ret = new ListNode(-1,head); // 虚头
  let p = ret;
  let q = head; // 头指针
  while (n--) q = q.next; // 先走n步
  while (q) { // 同时走,直至链表尾部
    q = q.next;
    p = p.next;
  }
  p.next = p.next.next; // 将p节点的下一位指向下下位,这时就跳过了n。因为 n = p.next;
  return ret.next; // 返回链表头节点
};