#include<stdio.h>
struct node
{
    int info;
    struct node* next;
};

node* newNode(int data)
{
    struct node* temp = new node;
    temp->info = data;
    temp->next=NULL;
     return (temp);
}

void print(node* head)
{
	node* ptr=head;
	while(ptr!=NULL)
	{
		printf("%d->",ptr->info);
		ptr=ptr->next;
	}
	printf("NULL");	
}

void reverse(node* start,int k)
{
	int arr[k];
	int i_start=0;
	node* ptr=start;
	
	for(int m=0;m<k;m++)
	{
		if(ptr==NULL)
		break;
		
		arr[k-1-m]=ptr->info;
		i_start=k-1-m;
		ptr=ptr->next;
	}
	
	ptr=start;
	
	for(int m=i_start;m<k;m++)
	{
		if(ptr==NULL)
		return;
		
		ptr->info=arr[m];
		ptr=ptr->next;
	}
	
	reverse(ptr,k);	
}


int main()
{
	int k=2;
	
	node* head=newNode(0);
	head->next=newNode(1);
	head->next->next=newNode(2);
	head->next->next->next=newNode(3);
	head->next->next->next->next=newNode(4);
	head->next->next->next->next->next=newNode(5);
	head->next->next->next->next->next->next=newNode(6);
	head->next->next->next->next->next->next->next=newNode(7);
	head->next->next->next->next->next->next->next->next=newNode(8);
	head->next->next->next->next->next->next->next->next->next=newNode(9);
	head->next->next->next->next->next->next->next->next->next->next=newNode(10);
		
	reverse(head,k);
	print(head);
	return 0;
}