本文共 1378 字,大约阅读时间需要 4 分钟。
解决这个问题我的想法就是 进行计数 当计数 每次当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; }};
转载地址:http://vhked.baihongyu.com/