C/Visual C - Encontrar numeros repetidos en una lista desordena

 
Vista:

Encontrar numeros repetidos en una lista desordena

Publicado por Lucy (1 intervención) el 03/02/2009 04:16:17
Hola, quiero encontrar repetidos en una lista simplemente enlazada que solo contiene un numero de tipo entero (int n1). Aqui hice mi funcion pero la verdad es que no encuentra bien los duplicados. Si alguien me pudiera ayudar estaria super agradecida. Saludos


void duplicados(nodo *registro)
{
nodo *aux=registro,*aux2=registro;
int n1;

while(aux->sig!=NULL)
{
n1=aux->n1;
while(aux2->sig!=NULL)
{
if(aux2->n1==n1)
printf(" Repetido");
aux2 = aux2->sig;
}
aux=aux->sig;
}
return;
}

Aclaraciones nodo proviene de una estructura asi:

Typedef struct numeros
{
int n1;
struct numeros *sig;
}nodo;
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

al parecer tienes que cambiar aux tambien...

Publicado por AntonioG (42 intervenciones) el 03/02/2009 18:55:23
Hola,

Al parecer cuando cmabias aux por el siguiente:
aux=aux->sig;
te flata volver a cambiar a aux2, de manera que recorras de nuevo la lista para buscar numeros parecidos a aux->n1.
Es decir, enseguida de
aux=aux->sig;
coloca las siguientes lineas
if (aux!=NULL)
{
aux2=aux->sig;
}

Tambien te sugiero que cmabies un poco la estructura de tu programa, ya que las condiciones de los whiles podrian hacer que no reconozcas numeros repetidos cuando el numero repetido está al final de la lista.

Algo como asi:
void duplicados(nodo *registro)
{
nodo *aux=registro,*aux2;
int n1;

while(aux!=NULL)
{
n1=aux->n1;
aux2=aux->sig;
while(aux2!=NULL)
{
if(aux2->n1==n1)
printf(" Repetido");
aux2 = aux2->sig;
}
aux=aux->sig;
if (aux!=NULL)
{
aux2=aux->sig;
}
}
return;
}

Saludos
Visita mi foro de ayuda en C!:
http://familiaytu.com/foroC/
y mi blog de ayuda en C:
http://familiaytu.com/blog/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar