原文:19. 删除链表的倒数第N个节点(力扣 面试题) - 每天一个JavaScript小知识@Js中文网 · 码农进阶题库

原文地址:https://www.javascriptc.com/interview-tips/zh_cn/leetcode/leetcode-javascript-solution-019/

题目:

难度:Middle

相关话题:链表双指针

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

示例:

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

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

说明:

给定的 n 保证是有效的。

进阶:

你能尝试使用一趟扫描实现吗?


思路:

定义双指针,其中指针2指针1n,等到指针1到达最后的时候,需要删除的就是指针2.next

注意:

如果定义时指针1已经为null,说明要删除的就是头一个,直接返回head.next

/**
 * @来源: Javascript中文网 - 前端进阶资源教程 https://www.javascriptc.com/
 * @介绍:一个致力于帮助开发者用代码改变世界为使命的平台,每天都可以在这里找到技术世界的头条内容
 * 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) {
  if(!head)return null
  let first=head,second=head
  while(first && n-->0)first=first.next
  if(!first)return head.next
  while(first && first.next){
    first=first.next
    second=second.next
  }
  let nxt=second.next
  // if(!nxt)return null
  second.next=nxt.next
  return head
};

扩展阅读: