insira um novo nó em qualquer índice em uma única lista vinculada

Como eu iria criar uma função que me permita inserir um novo nó em qualquer índice dentro de uma lista vinculada? aqui está a estrutura:

struct node {
    int data;
    struct node* next;
};

aqui está a função, observe que há apenas um ponteiro duplo, um índice e um parâmetro de dados.

void insertN(struct node** headRef, int index, int data);

e aqui está como o resultado deve ficar depois de chamar insertN:

[ HEAD ] -> [ 0 ] -> [ 15 ] -> [ 10 ] -> [ 5 ] -> [ NULL ]
insertN( &head, 3, -44);
[ HEAD ] -> [ 0 ] -> [ 15 ] -> [ 10 ] -> [ -44 ] -> [ 5 ] -> [ NULL ]
insertN( &head, 4, -55);
[ HEAD ] -> [ 0 ] -> [ 15 ] -> [ 10 ] -> [ -44 ] -> [-55 ] -> [ 5 ] -> [ NULL ]
insertN( &head, 0, -66);
[ HEAD ] -> [ -66 ] -> [ 0 ] -> [ 15 ] -> [ 10 ] -> [ 5 ] -> [ NULL ]

Eu sei como adicionar um novo nó na cabeça, mas não a qualquer momento. o jeito que eu estava pensando era

void insertN(struct node** headRef, int index, int data) {
    struct node* new;
    int i;
    for (i = 0; i <= index; i++) {
        if (i == index) {
            /* move what was here to next node and put in new node */
        }
    }

    return;
}

Eu apenas não tenho certeza sobre como fazer tudo isso, porque se algo estava no nó, eu tenho que mover todos os nós subseqüentes também.

questionAnswers(2)

yourAnswerToTheQuestion