LCR 021. 删除链表的倒数第N个结点(中等)

1,问题描述

难度:中等

LCR 021. 删除链表的倒数第 N 个结点

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

示例 1:

img

1
2
输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]

示例 2:

1
2
输入:head = [1], n = 1
输出:[]

示例 3:

1
2
输入:head = [1,2], n = 1
输出:[1]

提示:

  • 链表中结点的数目为 sz
  • 1 <= sz <= 30
  • 0 <= Node.val <= 100
  • 1 <= n <= sz

**进阶:**能尝试使用一趟扫描实现吗?

注意:本题与主站 19 题相同: https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/

2,初步思考

滑动窗的概念进行解决

截屏2025-02-27 14.29.58

为了解决,head头将被替换的情况,直接给他新加一个头,

3,代码处理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public static ListNode removeNthFromEnd(ListNode head, int n) {
// 加一个头即可
head = new ListNode(0, head);
int counter = 0;// 计数器
ListNode target = head;// 需要被替代的节点
ListNode pre = head;
while (pre != null) {
if (counter < (n + 1)) {
counter++;
} else {
target = target.next;
}
pre = pre.next;
}
target.next = target.next.next;
return head.next;
}