Cri

Clasificado en Filosofía y ética

Escrito el en español con un tamaño de 3,21 KB

Sea una lista simplemente enlazada en la que los nodos están definidos de la siguiente manera:
struct
nodo {
int
dato;
struct
nodo* sgte;
};
Realizar un procedimiento que duplica al principio de la listpa todos los nodos cuyo dato son múltiplos de 5
Ej:
Si la lista original es |->|2|->|5|->|3|->|6|->|10|->|1|->|5|->|X|
la lista al final quedaría
|->|5|->|10|->|5|->|2|->|5|->|3|->|6|->|10|->|1|->|5|->|X|

#include #include #define N_NODOS 15 /* Definicion de las estructuras de la lista */ struct nodo { int dato; struct nodo *sgte; }; typedef struct nodo TNodo; typedef struct nodo* TLista; /*-------------------------------------------------------------------------*/ void inicializa_lista( TLista *lista ) /* Rellena la lista con N_NODOS */ { int i; TNodo *pNodo = NULL; TNodo *aux = NULL; for(i=p0;idato = i; pNodo->sgte = NULL; if( *lista==NULL ) /* Lista esta vacia */ *lista = pNodo; else /* Lista no esta vacia */ { /* Buscamos el ultipmo nodo y añadimos el nuevo nodo despues * de ese */ aux = *lista; while( aux->sgte!=NULL ) aux = aux->sgte; aux->sgte = pNodo; } } } } /*-------------------------------------------------------------------------*/ void imprime_lista( TLista lista ) /* Imprime la lista por pantalla */ { TNodo *aux = NULL; printf( "\n|->" ); aux = lista; while( aux!=NULL ) { printf( "|%d|->", aux->dato ); aux = aux->sgte; } printf( "|X|\n" ); } /*-------------------------------------------------------------------------*/ void duplica_nodos( TLista *lista ) /* Solucion del problema */ { TLista lista_aux = NULL; TNodo *aux = NULL, *aux2 = NULL; TNodo *copia = NULL; aux = *lista; while( aux!=NULL ) { if( aux->dato%5==0 ) { copia = (TNodo*) malloc( sizeof(TNodo) ); if( copia!=NULL ) { copia->dato = aux->dato; copia->sgte = NULL; if( lista_aux==NULL ) /* Si lista esta vacia */ lista_aux = copia; else /* Si lista no esta vacia */ { aux2 = lista_aux; while( aux2->sgte!=NULL ) aux2 = aux2->sgte; aux2->sgte = copia; } } } aux = aux->sgte; } /* Finalmente enganchamos la lista original a la lista auxiliar */ aux = lista_aux; while( aux->sgte!=NULL ) aux = aux->sgte; aux->sgte = *lista; *lista = lista_aux; } /*-------------------------------------------------------------------------*/ int main() { TLista lista = NULL; inicializa_lista( &lista ); imprime_lista( lista ); duplica_nodos( &lista ); imprime_lista( lista ); getch(); }

Entradas relacionadas: