ListNode* reverseBetween(ListNode* prev,ListNode* next)//reverse prev->next, last->prev之间的链表
{
ListNode* last = prev->next;
ListNode* cur = last->next;
while(cur!=next)
{
last->next = cur->next;
cur->next = prev->next;
prev->next = cur;
cur = last->next;
}
return last;
}
ListNode *reverseKGroup(ListNode *head, int k) {
// Note: The Solution object is instantiated only once and is reused by each test case.
if(!head||k<=1) return head;
ListNode* dummy = new ListNode(0);
dummy->next = head;
ListNode* cur = head;
ListNode* prev = dummy;
int i = 0;
while(cur)
{
++i;
if(i%k==0)
{
prev = reverseBetween(prev,cur->next); //reverse一个区间
cur = prev->next; //注意这里不是cur = cur->next;
}else
cur = cur->next;
}
ListNode* newHead = dummy->next;
delete dummy;
return newHead;
}