19. 删除链表的倒数第 N 个结点

题目描述

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

样例输入

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

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

代码参考

var removeNthFromEnd = function(head, n) {
    // 删除操作一般都会有边界问题
    // 因此我们可以使用虚拟头节点的方式
    let dummyNode = new ListNode(-1)
    dummyNode.next = head
    let p1= dummyNode,p2=dummyNode
    for(let i = 0;i<n;i++){
        p1=p1.next
    }
    let parNode = p2
    while(p1){
        p1=p1.next
         parNode=p2
        p2=p2.next
    }
    parNode.next= parNode.next.next
    p2.next= null
    // console.log(parNode.val)
    return dummyNode.next
};

说明

思路可以参考上篇
剑指 Offer 22. 链表中倒数第K个节点
稍有差别的是删除节点时必须找到待删除节点的上一个节点。我们在这里可以设置父亲节点,参考代码中就使用的这种方法,同样的也可以在初始找到第K+1个节点,对应的也就是待删除节点的前一个

posted @ 2022-10-13 20:01  含若飞  阅读(18)  评论(0编辑  收藏  举报