Given a linked list and a number k. Reverse every k nodes in the list.
Example :
Input 1->2->3->4->5->6 and k = 2
Output 2->1->4->3->6->5
Solution : We have a pointer q which points to the head of the list initially. Advance this k times in a while loop and keep reversing the list. Now q points to (k+1)th node and we call the same procedure on it. This function returns the head of the reversed list.
struct node *reverseKNodes (struct node *head, int k) { struct node* q = head; struct node* r = NULL; struct node* s; int count = 0; while (q != NULL && count < k) { s = r; r = q; q = q->next; r->next = s; count++; } if(q != NULL) head->next = reverseKNodes(q, k); return r; }
Thanks.
struct node* reverseKNodes(node* head, int k) {
node* cur = head;
node* prev = NULL;
node* next;
int count = 0;
while(cur != NULL && count next;
cur->next = prev;
prev = cur;
cur = next;
count++;
}
if(cur!=NULL) {
head->next = reverseKNodes(cur, k);
}
return prev;
}
temp = NULL;
int value,nextValue ,count=0;
number can be any value.
loop(head->End){
temp = head -> next;
value = head -> value;
nextValue = temp -> value;
if(count value = nextValue;
temp -> value = value;
}
count ++;
head = head-> next;
}
I just wanted to know that can we use the Stack data structure to reverse the elements of the list? Does that affect the time complexity as compared to the solution posted here?