Skip to content

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

  • 题号:19
  • 来源:LeetCode
  • 难度:中等
  • 标签:链表 双指针
  • 语言:TypeScript
  • 解法:1 个
  • 作者:lmliheng
  • 最近更新:2026-09-27

TypeScript · O(n) 时间 · O(1) 空间 · 更新于 2026-09-27

先求链表长度,再定位待删节点的前驱

typescript

import { ListNode } from '../JS/DataStructure/ListNode.js'
/**
 * @difficulty medium
 * @tags 链表,双指针
 * @time O(n)
 * @space O(1)
 * @note 先求链表长度,再定位待删节点的前驱
 * 
 * @19. 删除链表的倒数第 N 个结点
 */

function removeNthFromEnd(head: ListNode<number> | null, n: number): ListNode<number> | null {
    if (!head) {
        return null
    }
    // 获取链表长度
    let list_length: number = 0;
    let p1: ListNode<number> | null = head as ListNode<number>
    let p2: ListNode<number> | null = head as ListNode<number>
    while (p1) {
        p1 = p1.next ? p1.next : null;
        list_length++
    }
    if (list_length === n) {
        return head.next
    }

    for (let i = 0; i < list_length - n - 1; i++) {
        if (!p2) {
            break
        }
        p2 = p2.next ? p2.next : null
    }

    // console.log('p2', p2)
    if (p2 && p2.next) {
        // console.log('删除节点', p2.next)
        p2.next = p2.next.next ? p2.next.next : null
    } else {
        return head.next
    }
    return head
};

源码:ts/leetcode/19. 删除链表的倒数第 N 个结点.ts


在 GitHub 上查看题目所在目录:lmliheng/algorithm