【每日一题】LeetCode 19. 删除链表的倒数第 N 个结点 TypeScript

给你一个链表,删除链表的倒数第 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

TypeScript 复制代码
/**
 * Definition for singly-linked list.
 * class ListNode {
 *     val: number
 *     next: ListNode | null
 *     constructor(val?: number, next?: ListNode | null) {
 *         this.val = (val===undefined ? 0 : val)
 *         this.next = (next===undefined ? null : next)
 *     }
 * }
 */

function removeNthFromEnd(head: ListNode | null, n: number): ListNode | null {
    const newL = new ListNode(-1,head)
    let slow = newL
    let fast = newL
    for(let i =0;i<n;i++){
        fast= fast.next
    }
    while(fast.next!==null){
        fast= fast.next
        slow=slow.next
    }
    slow.next = slow.next.next
    
    return newL.next
};

注释版:

TypeScript 复制代码
/**
 * Definition for singly-linked list.
 * class ListNode {
 *     val: number
 *     next: ListNode | null
 *     constructor(val?: number, next?: ListNode | null) {
 *         this.val = (val===undefined ? 0 : val)
 *         this.next = (next===undefined ? null : next)
 *     }
 * }
 */

function removeNthFromEnd(head: ListNode | null, n: number): ListNode | null {
    //创建一个新链表,第一个节点是-1,next指向head
    //如果直接=head,从head开始,当链表只有一个元素,null.next程序会报错,增加判断会冗余代码(摒弃)
    const newL = new ListNode(-1,head)
    //慢指针
    let slow = newL
    //快指针
    let fast = newL
    //快指针先走n步
    for(let i =0;i<n;i++){
        fast= fast.next
    }
    //快慢指针同时移动1步,这样他们之间始终相差n步
    //当快指针走到最后一个元素,fast.next指向null时,慢指针正好走在距离末尾元素位置n位置前一个
    while(fast.next!==null){
        fast= fast.next
        slow=slow.next
    }
    //改变slow的指向,跳过slow.next,直接指向下下一个
    slow.next = slow.next.next
    //删除头节点的链表
    return newL.next
};
相关推荐
天平37 分钟前
油猴脚本创建webworker踩坑记录
前端·javascript·typescript
ch_09181 天前
从0构建SDK第3节:实现 ReActAgent 的推理与行动循环
typescript·llm·agent
疯狂的魔鬼2 天前
一套 Schema 驱动四视图:记 useCrudSchemas 的设计与实践
前端·javascript·typescript
kyriewen4 天前
别再对着 TypeScript 报错发呆了:我把 10 个最常见的红色波浪线翻译成了人话
前端·javascript·typescript
妙码生花4 天前
现代前端的极致性能 icon 加载方案(死磕成功版)
前端·vue.js·typescript
MonkeyKing5 天前
鸿蒙ArkTS深度剖析:ArkTS与TS/JS核心差异、静态强类型实战优势
typescript·harmonyos
To_OC5 天前
LC 207 课程表:刚学图论那会儿,我连这是拓扑排序都没看出来
javascript·算法·leetcode
To_OC5 天前
LC 208 实现 Trie 前缀树:曾被名字劝退,写完发现是送分题
javascript·算法·leetcode
To_OC6 天前
LC 994 腐烂的橘子:人人都说是 BFS 入门题,我却写了三遍才过
javascript·算法·leetcode
To_OC6 天前
LC 200 岛屿数量:经典 DFS 入门题,我第一次写居然连方向都搞错了
javascript·算法·leetcode