题意: Given a linked list, reverse the nodes of a linked list k at a time and return its modified list.
If the number of nodes is not a multiple of k then left-out nodes in the end should remain as it is.
You may not alter the values in the nodes, only nodes itself may be changed.
分析:同swapPairs
AC代码:
ListNode* reverseKGroup(ListNode* head, int k) {
ListNode **pp = &head, *sub_head, *sub_del, *sub_pre, *sub_next;
if(k == 1) return head;
while((*pp) && ((*pp)->next) ){
sub_head = *pp;
sub_pre = sub_head;
sub_del = (*pp)->next;
ListNode *test = *pp;
int j;
for(j = 0; j < k && test; ++j){
test = test->next;
}
if(j != k){
return head;
}
for(int i = 1; i < k && sub_head && sub_del; ++i){
sub_next = sub_del->next;
sub_pre->next = sub_next; // delete *sub_del
sub_del->next = sub_head;
sub_head = sub_del;
sub_del = sub_next;
}
*pp = sub_head;
pp = &(sub_pre->next);
}
return head;
}