LeetCode-19-删除链表的倒数第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

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

题解

这一题其实思路是很清晰了,就是双指针或者快慢指针,让前指针和后指针之间的差值为n,然后再一起移动,直到start到最后就好了。

因为没有添加头指针导致操作会不一致,orz

关键添加一个头指针prehead的前面,这样可以统一操作!

然后前面的指针start先移动n步;

然后前后指针startend一起移动,直到start移动到最后。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
// 头指针
ListNode pre = new ListNode(0);
pre.next = head;
ListNode start = pre, end = pre;
// 前指针先移动n步
while(n != 0) {
start = start.next;
n--;
}
// 前后指针一起动,直到前面的指针到了最后一个位置
while(start.next != null) {
start = start.next;
end = end.next;
}
// 这里就是进行删除了
end.next = end.next.next;
return pre.next;
}
}

LeetCode-19-删除链表的倒数第N个结点
https://excelius.xyz/leetcode-19-删除链表的倒数第n个结点/
作者
Ther
发布于
2024年7月20日
许可协议