https://leetcode.com/problems/reverse-nodes-in-k-group/
依次抽出k个,划分出链表的一段,reverse这段,再拼接回去。
class Solution {
public:
ListNode *reverseKGroup(ListNode *head, int k) {
if (!head) return head;
ListNode dummy(0); dummy.next = head;
ListNode *prev = &dummy;
while (true) {
int i = 1;
ListNode *p = head;
while (p && i < k) { p = p->next; i++; }
if (!p) return dummy.next;
ListNode *next = p->next;
p->next = NULL;
ListNode *new_head = reverse_list(head);
prev->next = new_head; head->next = next;
prev = head; head = next;
}
}
ListNode *reverse_list(ListNode *head) {
ListNode *pre = NULL, *next;
while (head) {
next = head->next;
head->next = pre;
pre = head;
head = next;
}
return pre;
}
};