struct node *kAltReverse(struct node *head,int k) { if(head == NULL) return NULL; struct node *prev = NULL; struct node *curr = head; struct node *cn = NULL; int c = 0; while(curr != NULL && c < k) { cn = curr->next; curr->next = prev; prev = curr; curr = cn; c = c+1; } c =0; if(curr != NULL) head->next = curr; printf("cuu== %d\n",curr->data); // skip the k node while(curr != NULL && c < k-1) { curr = curr->next; c =c+1; } if(curr != NULL) curr->next = kAltReverse(curr->next,k); return prev; }
struct node *kAltReverse_i(struct node *head,int k) { if(head == NULL || head->next == NULL) return head; struct node *prev = NULL; struct node *curr = head; struct node *next = NULL; for(int i=0;i<k && curr!=NULL;i++) { next = curr->next; curr->next = prev; prev = curr; curr = next; } head->next = curr; for(int i=0;i<k-1 && curr!=NULL;i++) { curr = curr->next; } if(curr!=NULL) { curr->next = kAltReverse(curr->next,k); } return prev; }