首页 > 其他分享 >leetcode 19. 删除链表的倒数第 N 个结点 js实现

leetcode 19. 删除链表的倒数第 N 个结点 js实现

时间:2022-11-24 23:45:31浏览次数:67  
标签:head 19 结点 next 链表 let 倒数第 指针

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

示例 1:

输入: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

原题地址

 

/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */
/**
 * @param {ListNode} head
 * @param {number} n
 * @return {ListNode}
 */
//  使用双指针
// 第一个指针先走 n 步,然后两个指针一起走,当第一个指针到达末尾的时候,第二个指针刚好指向被删除的节点位置
// 为了找到被删除的节点的上一个节点,方便删除,所以定义一个哑结点,作为 second 指针
var removeNthFromEnd = function(head, n) {
    if(!head){
        return head
    }
    // 定义哑节点
    let dummy = new ListNode();
    // 将哑结点下一个指向 head
    dummy.next = head;
    // 定义第一个指针
    let first = head;
    // 定义第二个指针指向哑结点
    let second = dummy;
    // 先将第一个指针走 n 步
    for(let i=0;i<n;i++){
        first = first.next;
    }
    // 两个指针同时走,当 first节点不存在,在停止遍历
    while(first){
        first = first.next;
        second = second.next;
    }
    // 这时的 second 刚好是要删除的节点的上一个节点,改变节点的指向
    second.next = second.next.next;
    // 返回哑结点的下一个节点
    return dummy.next;
};

参考官方题解

标签:head,19,结点,next,链表,let,倒数第,指针
From: https://www.cnblogs.com/beileixinqing/p/16923859.html

相关文章

  • 算法5: LeetCode_单链表_两数相加
    题目:*给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。*请你将两个数相加,并以相同形式返回一个......
  • freertos-刘火良:延时列表(链表)
    前面几章的学习中,任务从创建后一直位于就绪列表中,延时、优先级等操作全部在就绪列表进行,这是不太方便的。根据任务的几个状态知,还需要一个延时列表,当任务进入延时状态时,则......
  • 在链表上实现 Partition 以及荷兰国旗问题
    在链表上实现Partition以及荷兰国旗问题作者:Grey原文地址:博客园:在链表上实现Partition以及荷兰国旗问题CSDN:在链表上实现Partition以及荷兰国旗问题题目描述给......
  • Office 2016 2019 2021 正版部署
    教学视频:https://www.youtube.com/watch?v=VSjRx7Hoa60文章摘抄自零度解说:https://www.freedidi.com/6619.html1.office软件部署工具:https://www.microsoft.com/en-us/d......
  • 代码随想录——链表
    移除链表元素题目简单注意:头节点也要删除时的处理方式下面第三种方法,连续几个都为要删除的节点时要注意/***添加虚节点方式*时间复杂度O(n)*空间复杂度......
  • 算法基础:单链表图解及模板总结
    ⭐写在前面的话:本系列文章旨在复习算法刷题中常用的基础算法与数据结构,配以详细的图例解释,总结相应的代码模板,同时结合例题以达到最佳的学习效果。本专栏面向算法零基础但有......
  • 代码随想录算法训练营第四天| 24. 两两交换链表中的节点 19.删除链表的倒数第N个节
    24.两两交换链表中的节点classSolution{publicListNodeswapPairs(ListNodehead){if(head==null||head.next==null){returnhe......
  • 199. Binary Tree Right Side View
    Giventhe root ofabinarytree,imagineyourselfstandingonthe rightside ofit,return thevaluesofthenodesyoucanseeorderedfromtoptobottom.......
  • 部署19c ADG过程中的问题处理
    回忆起来也是有些年没亲自动手搭建ADG了,今天正好有个机会重温,客户环境是19.16,恍惚记得上一次搭ADG还是在11.2.0.4的时代,时光荏苒啊。正好看下19c的ADG和11g的ADG在部署方......
  • 198. House Robber
    给定一个整数数组Arr,求解数组中连续的不相邻元素的和的最大值。例如:对于数组中的元素A1,A2,A3,A4,则需要判断A1+A3,A1+A4,A2+A4中的最大值即为所求。 状态转移方程:dp[i]......