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