Skip to content

Commit a0f4d3c

Browse files
committed
二刷25
1 parent 676ba2f commit a0f4d3c

File tree

4 files changed

+88
-12
lines changed

4 files changed

+88
-12
lines changed

docs/0025-reverse-nodes-in-k-group.adoc

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[#0025-reverse-nodes-in-k-group]
22
= 25. K 个一组翻转链表
33

4-
https://leetcode.cn/problems/reverse-nodes-in-k-group/[LeetCode - 25. K 个一组翻转链表 ^]
4+
https://leetcode.cn/problems/reverse-nodes-in-k-group/[LeetCode - 25. K 个一组翻转链表^]
55

66
给你链表的头节点 `head`,每 `k` 个节点一组进行翻转,请你返回修改后的链表。
77

@@ -30,14 +30,18 @@ image::images/0025-02.jpg[{image_attr}]
3030
*提示:*
3131

3232
* 链表中的节点数目为 `n`
33-
* `+1 <= k <= n <= 5000+`
34-
* `+0 <= Node.val <= 1000+`
33+
* `1 \<= k \<= n \<= 5000+`
34+
* `0 \<= Node.val \<= 1000+`
3535
3636
**进阶:**你可以设计一个只用 stem:[O(1)] 额外内存空间的算法解决此问题吗?
3737

3838
== 思路分析
3939

40-
先统计链表长度,然后根据长度将链表切段,每段使用递归反转链表,最后再接上剩余不够一段的部分。代码如下:
40+
先统计链表长度,然后根据长度将链表切段,每段使用递归反转链表,最后再接上剩余不够一段的部分。
41+
42+
image::images/0025-10.png[{image_attr}]
43+
44+
也可以从头开始遍历,内层遍历有 K 个元素就反转,否则就直接接上。
4145

4246
[[src-0025]]
4347
[tabs]
@@ -51,13 +55,19 @@ include::{sourcedir}/_0025_ReverseNodesInKGroup.java[tag=answer]
5155
----
5256
--
5357
54-
// 二刷::
55-
// +
56-
// --
57-
// [{java_src_attr}]
58-
// ----
59-
// include::{sourcedir}/_0025_ReverseNodesInKGroup_2.java[tag=answer]
60-
// ----
61-
// --
58+
二刷::
59+
+
60+
--
61+
[{java_src_attr}]
62+
----
63+
include::{sourcedir}/_0025_ReverseNodesInKGroup_2.java[tag=answer]
64+
----
65+
--
6266
====
6367

68+
69+
== 参考资料
70+
71+
. https://leetcode.cn/problems/reverse-nodes-in-k-group/solutions/1992228/you-xie-cuo-liao-yi-ge-shi-pin-jiang-tou-plfs/[25. K 个一组翻转链表 - 【视频讲解】从反转链表到 K 个一组反转^]
72+
. https://leetcode.cn/problems/reverse-nodes-in-k-group/solutions/248591/k-ge-yi-zu-fan-zhuan-lian-biao-by-leetcode-solutio/[25. K 个一组翻转链表 - 官方题解^]
73+
. https://leetcode.cn/problems/reverse-nodes-in-k-group/solutions/10416/tu-jie-kge-yi-zu-fan-zhuan-lian-biao-by-user7208t/[25. K 个一组翻转链表 - 图解 K 个一组翻转链表^]

docs/images/0025-10.png

65.3 KB
Loading

logbook/202503.adoc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2024,6 +2024,11 @@ endif::[]
20242024
|{doc_base_url}/0031-next-permutation.adoc[题解]
20252025
|❌ 双指针。看了解题思路,自己写出来的。解题思路还要多推敲。
20262026

2027+
|{counter:codes2503}
2028+
|{leetcode_base_url}/reverse-nodes-in-k-group/[25. K 个一组翻转链表^]
2029+
|{doc_base_url}/0025-reverse-nodes-in-k-group.adoc[题解]
2030+
|✅ 从头开始遍历,内层遍历有 K 个元素就反转,否则就直接接上。
2031+
20272032
|===
20282033

20292034
截止目前,本轮练习一共完成 {codes2503} 道题。
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
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.Objects;
7+
8+
public class _0025_ReverseNodesInKGroup_2 {
9+
// tag::answer[]
10+
/**
11+
* @author D瓜哥 · https://www.diguage.com
12+
* @since 2025-12-01 22:32:23
13+
*/
14+
public ListNode reverseKGroup(ListNode head, int k) {
15+
ListNode dummy = new ListNode(0);
16+
dummy.next = head;
17+
ListNode pre = dummy;
18+
ListNode cur = head;
19+
while (cur != null) {
20+
ListNode temp = cur;
21+
ListNode next = null;
22+
boolean flag = false;
23+
for (int i = 0; i < k - 1 && Objects.nonNull(temp.next); i++) {
24+
temp = temp.next;
25+
if (i == k - 2) {
26+
flag = true;
27+
next = temp.next;
28+
temp.next = null;
29+
}
30+
}
31+
32+
if (flag) {
33+
pre.next = reverse(cur);
34+
pre = cur;
35+
} else {
36+
pre.next = cur;
37+
break;
38+
}
39+
40+
cur = next;
41+
}
42+
return dummy.next;
43+
}
44+
45+
private ListNode reverse(ListNode head) {
46+
ListNode pre = null;
47+
while (head != null) {
48+
ListNode next = head.next;
49+
head.next = pre;
50+
pre = head;
51+
head = next;
52+
}
53+
return pre;
54+
}
55+
// end::answer[]
56+
57+
static void main() {
58+
new _0025_ReverseNodesInKGroup_2()
59+
.reverseKGroup(ListNodes.build(1, 2, 3, 4, 5), 2);
60+
}
61+
}

0 commit comments

Comments
 (0)