Author: Gour Ch. Saha Contact for any query:: gour_ch_saha@yahoo.co.in
#include<stdio.h> #include<stdlib.h> typedef struct node_tag { int data; struct node_tag *next; }node_type; node_type *create_link_list(int n); void print_link_list(node_type *root); node_type *kReverse(node_type *head , int n); node_type *reverse(node_type *head , int n); node_type *get_k_th_node(node_type *head , int k); main() { node_type *head; int n , k; printf("Give the number of element\n"); scanf("%d",&n); head=create_link_list(n); print_link_list(head); printf("Give the value of k\n"); scanf("%d",&k); head=kReverse(head , k); print_link_list(head); } node_type *kReverse(node_type *head , int k) { node_type *temp; head=reverse(head , k); temp=head; temp=get_k_th_node(temp , k); while(temp) { temp->next = reverse(temp->next , k); temp=get_k_th_node(temp->next , k); } return head; } node_type *reverse(node_type *head , int k) { node_type *prev , *cur , *save; int i; prev=NULL; cur=head; if(head==NULL || head->next == NULL || k<=1) { return head; } for(i=0;i<k && cur!=NULL;i++) { save=cur->next; cur->next = prev; prev=cur; cur=save; } if(i!=k) { cur=prev; prev=NULL; while(i>0) { save=cur->next; cur->next = prev; prev=cur; cur=save; i--; } } else { head->next = save; } return prev; } node_type *get_k_th_node(node_type *head , int k) { node_type *temp; int i; temp=head; for(i=1;i<k && temp!=NULL;i++) temp=temp->next; return temp; } node_type *create_link_list(int n) { int i,a[400]; node_type *head,*temp,*root; head = NULL; root=NULL; for(i=0;i<n;i++) { a[i]=i+1; } for(i=0;i<n;i++) { temp=(node_type *)malloc(sizeof(node_type)); temp->data=a[i]; temp->next=NULL; if(i==0) { root=temp; head=temp; } else { head->next=temp; head=head->next; } } return root; } void print_link_list(node_type *root) { node_type *temp; if(root) { for(temp=root;temp->next;temp=temp->next) { printf("%d-->",temp->data); } if(temp) { printf("%d\n",temp->data); } } }