#include <stdio.h>
#include <stdlib.h>
#define COUNT_NODES 10
typedef struct N
{
    int val;
    struct N* next;
}Node;

void addNode(Node** root, int val)
{
    Node* newNode = malloc(sizeof(Node));
    newNode->val = val;
    newNode->next = *root;
    *root = newNode;
}

/**
Index starts from 0
*/
void shiftNode(Node** rootNode, int nodeIndex, int shifts)
{
    int i=1;
    Node *pNode, *temp, *root = *rootNode;
 	if((shifts <= 0) || (nodeIndex < 0))
 	{
 		return;
 	}
 	
    if(nodeIndex != 0)
    {
    	for(i=1; i<nodeIndex; i++)
    	{
        	root = root->next;
    	}
    	pNode = root->next;
    	root->next = pNode->next;
    }
    else
    {
    	*rootNode = root->next;
    	pNode = root;
    	root->next = pNode->next;
    }
 
    for(i=0; i<shifts; i++)
    {
        root = root->next;
    }
    temp=root->next;
    root->next = pNode;
    pNode->next=temp;
}

void print(Node* root)
{
    while(root)
    {
        printf("%d -> ", root->val);
        root = root->next;
    }
    printf("END\n");
}

int main()
{
    int i=0;
    Node* root = NULL;
    srand(1234);
    while(i<COUNT_NODES)
    {
        addNode(&root, rand());
        i++;
    }
    print(root);
    shiftNode(&root, 0, 2);
    print(root);
    return 0;
}
