Ciao a tutti, ormai vi avrò rotto le scatole continuando ad aprire nuovi topic, ma confido nella vostra pazienza...
Oggi vi presento un mio programma preso da una prova d'esame. La richiesta è molto particolare e chiede di eliminare l'elemento centrale di una lista dinamica percorrendola una sola volta in totale (anche con più puntatori contemporaneamente). Bisogna sempre cancellare l'elemento che è dato dalla parte intera di (N+1)\2, dove naturalmente N è il numero di elementi. Allora la mia strategia consiste nel percorrere la lista contemporaneamente con due puntatori,ed ogni volta che il primo dei due compie 2 "salti", il secondo ne compie uno, finchè il primo non raggiunge la fine della lista. La funzione è molto breve e so per certo che la strategia è la migliore ed è giusta (anche il mio prof nella risoluzione la utilizza). Ho qualche problema nell'eliminare l'elemento trovato dal momento che:
- Se uso free, l'output del programma viene infinito e continua a scrivere numeri a caso.
- se non uso free (sono al corrente della spazzatura che viene a crearsi senza usare free) mi stampa la lista così come prima.
Queste sono le linee di codice, aspetto risposta.
#include <stdio.h>
#include <stdlib.h>
#include "FBListeDinamiche.c"
TipoLista *DeleteElemCent(TipoLista *testa)
{
TipoLista *cursore1P, *cursore2P, *PuntProvv;
int i = 0;
cursore1P = testa;
cursore2P = testa;
while (cursore2P->Prossimo != NULL)
{
cursore2P = cursore2P->Prossimo;
i++;
if (i % 2 == 0)
cursore1P = cursore1P->Prossimo;
}
PuntProvv = cursore1P;
cursore1P = cursore1P->Prossimo;
free(PuntProvv);
return (testa);
}
void main()
{
TipoLista *Testa;
Testa = CreaRiempiLista();
Testa = DeleteElemCent(Testa);
StampaLista(Testa);
}