class Solution {//1
public:
ListNode* reverseKGroup(ListNode* head, int k) //递归思想很好
{
ListNode* ptr = head;
for (int i = 0; i < k; ++i){
if (ptr == NULL)
return head;
else ptr = ptr->next;
}
ListNode* new_head = reverse(head, k);
head->next = reverseKGroup(ptr,k);
return new_head;
}
ListNode* reverse(ListNode* head, int k){
ListNode* prev = new ListNode(0);
for (int i = 0; i < k; ++i){
ListNode* tmp = head->next;
head->next = prev->next;
prev->next = head;
head = tmp;
}
return prev->next;
}
};
class Solution {//2
public:
ListNode* reverseKGroup(ListNode* head, int k) {
int size = listSizeModified(head, k);
if (size == 0)
return head;
ListNode *ptr = head,
*priorPtr = new ListNode(0),//添加一个头结点
*retPtr = priorPtr,
*tailPtr;
while (size > 0){
for (int i = 0; i < k; ++i){
if (i == 0)
tailPtr = ptr;
ListNode* tmpPtr = ptr->next;
ptr->next = priorPtr->next;
priorPtr->next = ptr;
ptr = tmpPtr;
if (i == k - 1){
tailPtr->next = ptr;
priorPtr = tailPtr;
}
size--;
}
}
return retPtr->next;
}
int listSizeModified(ListNode* head, int k){
int count = 0;
while (head != NULL){
head = head->next;
count++;
}
return count - count % k;
}
};