Trif
Si tu veux tu fais une liste temporaire qui débute vraiment au début de la liste circulaire, genre avant de l'avoir modifié quelque part. Ainsi tu as la tete de liste, et tu peux ainsi parcourir la liste pour extraire, insérer, etc...
Sans valeurs triées évidemment.
Et donc quand tu veux insérer en entete, Tu envoie ta chaîne genre tu te fais un typedef struct cellulecircu* Listecircu :
Listecircu InsererEnTete (Listecircu *Liste, int element); /*Tu peux remplacer int par tout autre type bien entendu.
Tu te fais un Allouecellule de la taille de l'element, avec malloc et sizeof en faisant un cast pour forcer le compilateur à utiliser le type que tu veux pour sizeof (vraiment très chiant sinon).
Vu que tu as appelé ta Liste en pointeur, elle est modifiée, cependant elle reste en tête de liste si tu gères. T'as juste à la parcourir avec une liste temporaire pour retrouver la valeur de départ et ainsi tu sais où tu dois raccorder.
De plus, pour les circulaires, la récursivité facilite grandement les choses, même pour les listes normales d'ailleurs. Essaye de t'y familiariser, tu vas voir ça sera beaucoup plus facile après.
J'ai eu mon partiel de prog hier xD