//挺快的但是空间占用率比较高而且感觉写的好麻烦哦orz
class Solution {
public:
ListNode * reverseKGroup(ListNode* head, int k) {
vector<ListNode*> every;
ListNode* ptr;
ptr = head;
while (ptr != NULL) {
every.push_back(ptr);
ptr = ptr->next;
}
int len = size(every);
if (len < k) { return head; }
bool is_full = 0;
for (int i = 0; i < len; i++) {
int deferred = i - i / k * k;
if (deferred == 0) {
if (len - i >= 2*k) { every[i]->next = every[i + k + k - 1]; }
else if (len - i > k) { every[i]->next = every[i + k]; }
else if (len - i == k) {
is_full = true;
every[i]->next = NULL;
}
//else {
// if (i == len - 1) every[i]->next = NULL;
// else { every[i]->next = every[i + 1]; }
//}
}
else {
if (is_full) { every[i]->next = every[i - 1]; }
else {
if (i == len - 1) { every[i]->next = NULL; }
else if (len + deferred - i >= k) { every[i]->next = every[i - 1]; }
else { every[i]->next = every[i + 1]; }
}
}
}
head = every[k - 1];
return head;
}
};