(LeetCodeHot100)19. 删除链表的倒数第 N 个结点——remove-nth-node-from-end-of-list
(LeetCodeHot100)19. 删除链表的倒数第 N 个结点——remove-nth-node-from-end-of-list
zhangzhang19. 删除链表的倒数第 N 个结点——remove-nth-node-from-end-of-list
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
示例 1:
1 | 输入:head = [1,2,3,4,5], n = 2 |
示例 2:
1 | 输入:head = [1], n = 1 |
示例 3:
1 | 输入:head = [1,2], n = 1 |
提示:
- 链表中结点的数目为
sz 1 <= sz <= 300 <= Node.val <= 1001 <= n <= sz
我的错误代码
1 | package com.example.leetcode; |
- 链表:
1→2→3→4→5(长度 5),n=5(要删除倒数第 5 个节点,也就是头节点1); - 代码执行过程:
- 快指针先走
n+1=6步,但链表只有 5 个节点,走第 5 步时fast就变成null,第 6 步循环里会触发return null,直接返回空(完全错误,正确应该返回2→3→4→5); - 就算链表长度刚好够(比如链表
1→2,n=2):快指针先走3步?不,链表长度 2,快指针走第 1 步到2,第 2 步到null,第 3 步循环里fast==null,返回null,而正确应该返回2。
- 快指针先走
答案
- 答案采用了虚拟头结点的方式,以防出现要删除的结点是第一个结点:
1 | class Solution { |
- 注意返回的是虚拟头节点的下一个结点(以防删除的是第一个结点)




