25. K 个一组反转链表
2025-03-05 09:30:11

Problem: 25. K 个一组翻转链表

思路

本题的主要思想和反转链表相同,但是多了很多细节处理。

首先,最后剩余的节点无需反转(起初我写成剩余节点也反转的了)。

然后,由于是一组一组的反转链表,不要忘了在每一组反转完链表后,把上一组的尾节点连接到这一组链表的头节点上。

以及,最后返回的头节点也不再是起初的头节点,因此我们可以用一个哑节点来辅助,最后返回哑节点的下一个节点即可。

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode reverseKGroup(ListNode head, int k) {
ListNode dummy = new ListNode();
ListNode lastq = dummy;
ListNode p = head;
ListNode ans = p;
int n = 0;
while (p != null) {
p = p.next;
n++;
}
p = head;
for (int j = 0; j < (n / k); j++) {
ListNode q = p;
ListNode h = p;
p = p.next;
for (int i = 0; i < k - 1; i++) {
q.next = p.next;
p.next = h;
h = p;
p = q.next;
}
lastq.next = h;
lastq = q;
}
return dummy.next;
}
}
上一页
2025-03-05 09:30:11