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);
  }
 }
}


Free Web Hosting