Inserire un nuovo elemento nella lista durante un ciclo for

di
Anonimizzato13836
il
5 risposte

Inserire un nuovo elemento nella lista durante un ciclo for

Ciao a tutti,
ho questo problema:
devo inserire degli elemento in coda di una lista concatenata.
L'inserimento avviene tramite la selezione di alcune caratteristiche di 2 elementi della lista.
Cioè faccio un ciclo for ("primo for") per selezionare il primo elemento. Selezionato il primo faccio partire un ciclo for innestato ("secondo for") da questo elemento fino alla fine.
Selezionato anche il secondo elemento, vorrei aggiungere un elemento in coda alla lista, ma poi ricominciare il ciclo for (il "primo for") dove ero rimasto per poter aggiungere altri elementi.
Qual'è il metodo più semplice?

for (r1 = first ; r1->next != NULL ; r1 = r1->next){
				if (r1->life[4] !=1){ 
		    		r1->life[4]=1;
		    		}
				
		    	Elem* r2=r1;
		    	for(r2=r1; r2->next !=NULL; r2=r2->next){
		    		if (r2->life[4] !=1){ 
				    	r2->life[4]=1;
				    	break;
		    		} 
		    	}
		    
			}

dove e come dovrei inserire la parte del codice seguente?

 e->next = malloc(sizeof(Elem));
			    e = e->next;
			    e->life[1]=0;
			    e->life[2]=0;
			    e->life[3]=0;
			    e->life[4]=1;
			    e->next = NULL; 
-premetto che ho semplificato di molto il codice,è solo per fare capire come sono innestati i cicli for-
Grazie mille a tutti!

5 Risposte

  • Re: Inserire un nuovo elemento nella lista durante un ciclo for

    Quando e dove devi inserire il nuovo elemento?
    Ha legami con quelli "selezionati"?
  • Re: Inserire un nuovo elemento nella lista durante un ciclo for

    Posso inserire l'elemento(o gli elementi) sia durante il ciclo for, sia alla fine tutti insieme. Inserendolo durante il ciclo metterò un valore che lo identificherà come nuovo e quindi non verrà utilizzato.
    Preferirei mettere l'elemento nuovo come ultimo elemento. Ma se ci sono soluzioni più semplici va bene lo stesso.
    Grazie
  • Re: Inserire un nuovo elemento nella lista durante un ciclo for

    Una possibile soluzione è :

    1) scorri tutti gli elementi della lista e setti un puntatore all'ultimo elemento (ptr)

    2) esegui i tuoi cicli e quando le condizioni richieste si verificano aggiungi il nuovo elemento tramite ptr

    3) fai avanzare ptr ( in modo che punti sempre all'ultimo elemento )

    4) fai quello che devi e esci dal ciclo con break;

    Alla fine dei cicli puoi continuare a salvare elementi in coda tramite ptr
  • Re: Inserire un nuovo elemento nella lista durante un ciclo for

    Grazie mille ora lo provo.
    Mi conviene settare ptr prima del ciclo for, giusto?
  • Re: Inserire un nuovo elemento nella lista durante un ciclo for

    Si.

    Altrimenti dovresti usare a ogni inserimento un ciclo che scorre la lista fino alla fine.
    Così invece hai il puntatore già pronto
Devi accedere o registrarti per scrivere nel forum
5 risposte