Lista semplice

Puntatore di testa e nodi con informazioni

Dichiarazioni

typedef struct nodo
{
  int info;
  struct nodo *link;
} NODO;

typedef NODO  *pnodo;
typedef pnodo Lista;

Operazioni

Aggiungere un nodo in TESTA

void aggInTesta(Lista *L, int N)
{
  pnodo p;
  p=(pnodo)malloc(sizeof(NODO));
  p->info=N;
  p->link=(*L);
  (*L)=p;
}

Aggiungere un nodo in CODA

void aggInCoda(Lista *L, int N)
{
  pnodo p;
  p=(pnodo)malloc(sizeof(NODO));
  p->info=N;
  p->link=NULL;

  if((*L) == NULL)
       (*L)=p;
  else
  {
     pnodo prec=(*L);
     while(prec->link != NULL)
        prec=prec->link;
     prec->link=p;
  }
}

Aggiungere un nodo in ORDINE

void AggInOrdine(Lista *L, int N)
{
  pnodo p;
  p=(pnodo)malloc(sizeof(NODO));
  p->info=N;

  if((*L) == NULL || N <= (*L)->info)
  {
    p->link=(*L);
    (*L)=p;
  }
  else
  {
    pnodo attuale=(*L);
    pnodo prossimo=attuale->link;
    while(prossimo != NULL && prossimo->info < N)
    {
        attuale=prossimo;
        prossimo=prossimo->link;
    }
    p->link=prossimo;
    attuale->link=p;
  }
}

Aggiungere un nodo DOPO un certo nodo

Eliminare un nodo in TESTA

Eliminare un nodo DOPO un certo nodo

Contare i nodi

Eliminare TUTTI i nodi

void rilascia(Lista *L)
{
  pnodo p;

  while((*L) != NULL)
  {
     p=(*L);
     (*L)=(*L)->link;
     free(p);
  }
}
La più lunga
int piuLunga(Lista L1, Lista L2)
{
  while(L1 != NULL && L2 != NULL)
  {
     L1=L1->link;
     L2=L2->link;
  }
  if(L1 == NULL && L2 == NULL) return  0;
  else if(L2 != NULL)          return -1;
  else                         return +1;
}