[路飞][LeetCode]19_删除链表中的倒数第N个结点

219 阅读1分钟

看一百遍美女,美女也不一定是你的。但你刷一百遍算法,知识就是你的了~~

谁能九层台,不用累土起。

题目地址

题目

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

示例 1:

image.png

输入: head = [1,2,3,4,5], n = 2
输出: [1,2,3,5]

示例 2:

输入: head = [1], n = 1
输出: []

示例 3:

输入: head = [1,2], n = 1
输出: [1]

提示:

  • 链表中结点的数目为 sz
  • 1 <= sz <= 30
  • 0 <= Node.val <= 100
  • 1 <= n <= sz

解题思路

  • 定义两个指针,快指针比慢指针快n
  • 当快指针到达尾结点时,慢指针刚好到达要删除的结点
  • 将慢指针的下个节点指向要删除节点的后置节点便可完成删除

解题代码

var removeNthFromEnd = function(head, n) {
    let vnode = new ListNode(-1,head)
    let slow = vnode
    let fast = vnode
    while(n--) fast =fast.next
    if(!fast) return vnode.next
    while(fast.next){
        fast=fast.next
        slow= slow.next
    }
    slow.next = slow.next.next
    return vnode.next
};

如有任何问题或建议,欢迎留言讨论!