Lista jednokierunkowa

Witam.

Czy byłby ktoś w stanie na podstawie poniższego zadania wytłumaczyć tak łopatologiczne czym jest lista jedno/dwukierunkowa oraz jak zastosować tą pierwszą w kodzie poniżej ? Jakoś nie potrafię tego zrozumieć ;/

void drukuj(void **a){


}


int main(void)

{

    void *a1[2];

    char b1 = 'x';


    void *a2[2];

    char b2 = 'y';


    void *a3[2];

    char b3 = 'z';



    drukuj(a1);

}

Chodzi o to aby funkcja drukuj wypisywała znaki zawarte w b1,b2,b3 a zmienne te mają być przekazywane do funkcji przez jeden wskaźnik void**. Mam wykorzystać listę jednokierunkową, powiązać zmienne b z tablicami oraz tablice ze sobą nawzajem. Szukałem sporo na ten temat w necie lecz nigdzie nie było to wytłumaczone tak na “chłopski rozum” ;p

Byłbym mega-wdzięczny za pomoc i pozdrawiam.