wstaw nowy węzeł w dowolnym indeksie w ramach jednej połączonej listy

w jaki sposób mógłbym stworzyć funkcję, która pozwoli mi wstawić nowy węzeł przy dowolnym indeksie w połączonej liście? oto struktura:

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

oto funkcja, zauważ, że istnieje tylko podwójny wskaźnik, indeks i parametr danych.

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

a oto jak powinien wyglądać wynik po wywołaniu wstawieniaN:

[ 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 ]

Wiem, jak dodać nowy węzeł do głowy, ale nie w żadnym momencie. tak myślałem

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

po prostu nie jestem pewien, jak to zrobić, ponieważ jeśli coś było w węźle, muszę przenieść wszystkie kolejne węzły.

questionAnswers(2)

yourAnswerToTheQuestion