解决这个问题我的想法就是 进行计数 当计数 每次当count=1时记为head count=k时记为tail 然后反转 连入原链表 最后要记得的是 要把最后没有进行反转的地方 也加入到链表中
class Solution {
public:
ListNode* reverseKGroup(ListNode* head, int k) {
if(!head||!head->next)
return head;
if(k==1)
return head;
ListNode *prenode=new ListNode(-1);
prenode->next=head;
ListNode *pre=prenode;
int count=1;
ListNode *scan=head;
ListNode *first=NULL;
ListNode *last=NULL;
while(scan)
{
if(count==k)
{
last=scan;
scan=scan->next;
count=1;
pre->next=reverse(first,last);
pre=first;
}
if(count==1) {
first = scan;
if(!scan)
break;
}
scan=scan->next;
count++;
}
if(count!=1)
pre->next=first;
return prenode->next;
}
ListNode * reverse(ListNode *head,ListNode *tail)
{
if(!head||!head->next)
return head;
ListNode *curhead=head;
ListNode *scan=head->next;
curhead->next=NULL;
while(scan!=tail)
{
ListNode *temp=scan->next;
scan->next=curhead;
curhead=scan;
scan=temp;
}
tail->next=curhead;
return tail;
}
};