Question: Reverse Each K element in Link List .

Solution: #include
#include
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;inext;
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 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 {
a[i]=i+1;
}
for(i=0;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);
}
}
}