Ciao ti ho riscritto il codice per l'inserirmento dei dati:
#include <stdio.h>
#include <stdlib.h>
struct nodo
{
int elemento;
struct nodo* next;
struct nodo* head;
};
struct nodo* AggiungiInTesta(struct nodo* l, int el);
struct nodo* AggiungiInCoda(struct nodo* l, int el);
void Print(struct nodo* l);
int VerificaValore(struct nodo* l, int value);
int main()
{
struct nodo* l=NULL;
l = AggiungiInTesta(l,61);
l = AggiungiInTesta(l,20);
l = AggiungiInCoda(l,61);
l = AggiungiInTesta(l,54);
l = AggiungiInCoda(l,19);
l = AggiungiInTesta(l,78);
l = AggiungiInCoda(l,14);
l = AggiungiInTesta(l,19);
l = AggiungiInCoda(l,963);
Print(l);
return 0;
}
struct nodo* AggiungiInCoda(struct nodo* l, int el)
{
struct nodo* p;
p = (struct nodo*) malloc(sizeof(struct nodo));
p->elemento = el;
if (l == NULL)
{
l = p;
l->next = l;
l->head = l;
}
else
{
if (l->elemento != p->elemento)
{
if(l->next == l->head) /* se il prossimo elemento è la testa della lista */
{
/* aggiungo l'elemento in coda */
p->next = l->next;
l->next = p;
p->head = l->head;
}
else
AggiungiInCoda(l->next, el);
}
}
return l;
}
struct nodo* AggiungiInTesta(struct nodo* l, int el)
{
struct nodo* p;
p = (struct nodo*) malloc(sizeof(struct nodo));
p->elemento = el;
if (l==NULL)
{
l = p;
l->next = l;
l->head = l;
}
else
{
if (!VerificaValore(l->next,el))
return l;
p->next = l->next ;
l->next = p;
p->head = l->head;
}
return l;
}
void Print(struct nodo* l)
{
l = l->next;
printf("%d - ",l->elemento);
if (l != l->head)
Print(l);
}
int VerificaValore(struct nodo* l, int value)
{
if (l->elemento == value)
return 0;
else
{
if(l != l->head)
if (!VerificaValore(l->next, value))
return 0; /* trovato un elemento con quel valore, quindi non puoi scriverci*/
}
return 1; /* non c'è nessun elemento con quel valore, puoi scrivere*/
}
C'è l'inserimento in Testa e in Coda.
Io per inserimento in Testa intendo subito dopo il primo dato, es:
l = AggiungiInTesta(l,61);
l = AggiungiInTesta(l,14);
l: 61 - 14
l = AggiungiInTesta(l,61);
l = AggiungiInTesta(l,14);
l = AggiungiInTesta(l,36);
l: 61 - 36 - 14
Mentre con inserimento in Coda avviene così:
l = AggiungiInCoda(l,19);
l = AggiungiInCoda(l,18);
l: 18 - 19
l = AggiungiInCoda(l,19);
l = AggiungiInCoda(l,18);
l = AggiungiInCoda(l,28);
l = AggiungiInCoda(l,39);
l: 18 - 28 - 39 - 19
Spero sia giusta la cosa.