I'm getting ready for a technical interview, and I'm stuck writing this program to cancel all k nodes of a linked list.
for instance
1->2->3->4->5->6 //Linked List 2->1->4->3->6->5 //Output for k=2
EDIT:
Here is my code. I get only 6-> 5 as output.
struct node* recrev(struct node* noode,int c) { struct node* root=noode,*temp,*final,*prev=NULL; int count=0; while(root!=NULL && count<c) { count++; temp=root->link; root->link=prev; prev=root; root=temp; } if(temp!=NULL) noode->link=recrev(temp,c); else return prev; }
Any help is appreciated. Thanks.
EDIT: I tried to implement Eran Zimmermann's algorithm as shown below.
struct node* rev(struct node* root,int c) { struct node* first=root,*prev,*remaining=NULL; int count=0; while(first!=NULL && count<c) { count++; prev=first->link; first->link=remaining; remaining=first; first=prev; } return remaining; } struct node* recc(struct node* root,int c) { struct node* final,*temp,*n=root,*t; int count=0; while(n!=NULL) { count=0; temp=rev(n,c); final=temp; while(n!=NULL && count<c) { printf("inside while: %c\n",n->data); // This gets printed only once if(n->link==NULL) printf("NULL"); //During first iteration itself NULL gets printed n=n->link; final=final->link; count++; } } final->link=NULL; return final; }
Vivek source share