Sinceramente da quello che ho capito il problema è questo:

NULL <--> A <--> B <--> C <--> D <--> E <--> F <--> G <--> H <--> NULL

Questa è la lista.

Io devo prendere due puntatori agli elementi di questa lista.

P1 e P2 che puntano rispettivamente a "B" e a "F", in più un numero che mi dica quanti elementi sucessivi devono avere.
Quindi il prototipo della funzione può essere tranquillamente:

codice:
char *f (CharElem *p1, CharElem *p2, int n);
Adesso basta che fai due controlli per vedere se per ogni puntatore, si possano acquisire gli n elementi sucessivi, cioè se n non superi il limite di elementi.
Poi scorri da una parte, scorri dall'altra..e concateni ogni carattere con la sua stringa rispettiva, cosi da crearne 2 diverse.
Poi rifai il procedimento per queste due, e ritorni la stringa.

Non mi ricordo se esiste una funzione per convertire da char a char *, ma mi pare di nò.
Comunque in questo modo dovrebbe funzionare lostesso:

codice:
sprintf (s, "%c", p1 -> elemento);
Dove s è una stringa (char *), mentre "p -> elemento" è un carattere (char) che naturalmente è il tipo di elemento contenuto nella tua lista.