25. K 个一组翻转链表

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
class Solution
{
public:
ListNode *reverseKGroup(ListNode *head, int k)
{
ListNode _header(0, head);
ListNode *last = &_header;
head = last;
int count = 0;
while (head) {
head = head->next;
count++;
if (head && count == k) {
count -= k;
ListNode *tmp_last_next = last->next;
reverseK(last, k);
head = last = tmp_last_next;
}
}
return _header.next;
}

void reverseK(ListNode *start, int k)
{
ListNode *cur = start, *next = start->next;
int count = 0;
while (count < k) {
ListNode *tmp = next->next;
next->next = cur;
cur = next;
next = tmp;
count++;
}
start->next->next = next;
start->next = cur;
}
};