Skip to content

Commit 9bc4cd0

Browse files
committed
二刷19
1 parent 0b2c53a commit 9bc4cd0

File tree

6 files changed

+95
-15
lines changed

6 files changed

+95
-15
lines changed

docs/0019-remove-nth-node-from-end-of-list.adoc

Lines changed: 49 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,72 @@
11
[#0019-remove-nth-node-from-end-of-list]
2-
= 19. Remove Nth Node From End of List
2+
= 19. 删除链表的倒数第 N 个结点
33

4-
{leetcode}/problems/remove-nth-node-from-end-of-list/[LeetCode - Remove Nth Node From End of List^]
4+
https://leetcode.cn/problems/remove-nth-node-from-end-of-list/[LeetCode - 19. 删除链表的倒数第 N 个结点 ^]
55

6-
Given a linked list, remove the _n_-th node from the end of list and return its head.
6+
给你一个链表,删除链表的倒数第 `n` 个结点,并且返回链表的头结点。
77

8-
*Example:*
8+
*示例 1:*
99

10-
[subs="verbatim,quotes,macros"]
11-
----
12-
Given linked list: *1->2->3->4->5*, and *_n_ = 2*.
10+
image::images/0019-01.jpg[{image_attr}]
1311

14-
After removing the second node from the end, the linked list becomes *1->2->3->5*.
15-
----
12+
....
13+
输入:head = [1,2,3,4,5], n = 2
14+
输出:[1,2,3,5]
15+
....
16+
17+
*示例 2:*
18+
19+
....
20+
输入:head = [1], n = 1
21+
输出:[]
22+
....
23+
24+
*示例 3:*
25+
26+
....
27+
输入:head = [1,2], n = 1
28+
输出:[1]
29+
....
1630

17-
*Note:*
1831

19-
Given _n_ will always be valid.
32+
*提示:*
2033

21-
*Follow up:*
34+
* 链表中结点的数目为 `sz`
35+
* `+1 <= sz <= 30+`
36+
* `+0 <= Node.val <= 100+`
37+
* `+1 <= n <= sz+`
2238
23-
Could you do this in one pass?
39+
**进阶:**你能尝试使用一趟扫描实现吗?
2440

25-
== 解题分析
41+
42+
== 思路分析
2643

2744
快慢指针
2845

29-
image::images/0019-0.png[{image_attr}]
46+
image::images/0019-02.png[{image_attr}]
3047

3148
[[src-0019]]
49+
[tabs]
50+
====
51+
一刷::
52+
+
53+
--
3254
[{java_src_attr}]
3355
----
3456
include::{sourcedir}/_0019_RemoveNthNodeFromEndOfList.java[tag=answer]
3557
----
58+
--
59+
60+
二刷::
61+
+
62+
--
63+
[{java_src_attr}]
64+
----
65+
include::{sourcedir}/_0019_RemoveNthNodeFromEndOfList_2.java[tag=answer]
66+
----
67+
--
68+
====
69+
3670

3771
== 参考资料
3872

docs/images/0019-01.jpg

17.7 KB
Loading
File renamed without changes.

logbook/202503.adoc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,11 @@ endif::[]
255255
|{doc_base_url}/0142-linked-list-cycle-ii.adoc[题解]
256256
|✅ 双指针+数学
257257

258+
|{counter:codes2503}
259+
|{leetcode_base_url}/remove-nth-node-from-end-of-list/[19. 删除链表的倒数第 N 个结点^]
260+
|{doc_base_url}/0019-remove-nth-node-from-end-of-list.adoc[题解]
261+
|✅ 双指针+虚拟头节点。使用虚拟头结点会省事好多。
262+
258263
|===
259264
˚
260265
截止目前,本轮练习一共完成 {codes2503} 道题。

src/main/java/com/diguage/algo/leetcode/_0019_RemoveNthNodeFromEndOfList.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ public class _0019_RemoveNthNodeFromEndOfList {
3636
* Runtime: 0 ms, faster than 100.00% of Java online submissions for Remove Nth Node From End of List.
3737
*
3838
* Memory Usage: 34.6 MB, less than 100.00% of Java online submissions for Remove Nth Node From End of List.
39+
*
40+
* @author D瓜哥 · https://www.diguage.com
41+
* @since 2019-07-26 20:17
3942
*/
4043
public ListNode removeNthFromEnd(ListNode head, int n) {
4144
if (Objects.isNull(head) || n == 0) {
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.diguage.algo.leetcode;
2+
3+
import com.diguage.algo.util.ListNode;
4+
import com.diguage.util.ListNodes;
5+
6+
import java.util.Arrays;
7+
8+
public class _0019_RemoveNthNodeFromEndOfList_2 {
9+
// tag::answer[]
10+
/**
11+
* @author D瓜哥 · https://www.diguage.com
12+
* @since 2025-04-15 21:26:08
13+
*/
14+
public ListNode removeNthFromEnd(ListNode head, int n) {
15+
ListNode dummy = new ListNode(0);
16+
dummy.next = head;
17+
ListNode fast = dummy;
18+
while (n >= 0) {
19+
fast = fast.next;
20+
n--;
21+
}
22+
ListNode pre = dummy;
23+
ListNode slow = head;
24+
while (fast != null) {
25+
fast = fast.next;
26+
pre = slow;
27+
slow = slow.next;
28+
}
29+
pre.next = slow.next;
30+
return dummy.next;
31+
}
32+
// end::answer[]
33+
34+
public static void main(String[] args) {
35+
new _0019_RemoveNthNodeFromEndOfList_2()
36+
.removeNthFromEnd(ListNodes.build(Arrays.asList(1)), 1);
37+
}
38+
}

0 commit comments

Comments
 (0)