您的位置:首页 > Web前端 > Node.js

25. Reverse Nodes in k-Group

2016-04-25 11:38 549 查看
解决这个问题我的想法就是 进行计数 当计数 每次当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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: