0
Simple circular list implemented in C
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
typedef struct s_no{
    float info;
    struct s_no* proximo;
} no_t;
no_t* cria (){
    return NULL;
}
no_t* insere (no_t* l, float v){
    no_t* p = (no_t*) malloc(sizeof(no_t));
    p->info = v;
    if (l == NULL){
        l = p;
        p->proximo = l;             
    }else{
        no_t *aux = l;
        while (aux->proximo != l){
            aux = aux->proximo;
        }
        aux->proximo = p;
        p->proximo = l;
        l = p;      
    }
    return p;
}
void imprime (no_t* l){
    if (l){
        no_t* q = l;
        do{
            printf("%f\n", q->info);
            q = q->proximo;
        }while (q != l);    
    }
}
void libera (no_t* l){
    no_t* q = l;
    while (q->proximo != l){
        no_t* t = q->proximo;
        free(q);
        q = t;
    }   
}
no_t* retira_inicio(no_t* l, float v){
    if (l == NULL)
        return l;
    if (l == l->proximo){
        free(l);
        return NULL;
    }       
    no_t *p = l;
    while (p != l){
        p = p->proximo;
    }
    no_t *aux = l;
    p->proximo = aux->proximo;
    l = aux->proximo;
    free(aux);
    return l;
}
no_t* retira(no_t* l, float v){
    no_t* ant = NULL;
    no_t *p = l;
    if (l == NULL)
        return l;
    if (p->info == v){
        return retira_inicio(l, v);
    }
    ant = p;
    p = p->proximo;
    while ((p != l) && (p->info != v)){
        ant = p;
        p = p->proximo;
    }
    if (p == l)
        return NULL;
    ant->proximo = p->proximo; 
    free(p);
    return l;
}
						
Could you add a context to your question?
– gato