Foros del Web » Programación para mayores de 30 ;) » C/C++ »

unir listas simplemente enlzadas en una sola

Estas en el tema de unir listas simplemente enlzadas en una sola en el foro de C/C++ en Foros del Web. Hola amigos, Me preguntaba si me pueden hacer el favor de orientarme en unir dos listas simplemente enlazadas con C en una sola, la definición ...
  #1 (permalink)  
Antiguo 04/11/2011, 19:22
 
Fecha de Ingreso: diciembre-2006
Mensajes: 213
Antigüedad: 17 años, 4 meses
Puntos: 3
unir listas simplemente enlzadas en una sola

Hola amigos,

Me preguntaba si me pueden hacer el favor de orientarme en unir dos listas simplemente enlazadas con C en una sola, la definición de mi lista es la siguiente:

Código C:
Ver original
  1. typedef struct lista_s {    /* lista simple enlazada */
  2.   int dato;
  3.   struct lista_s *sig;
  4. }lista_t;

Desde ya muchas gracias
  #2 (permalink)  
Antiguo 04/11/2011, 19:41
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: unir listas simplemente enlzadas en una sola

Si l1 y l2 son las listas, recorre l1 hasta encontrar el ultimo elemento, cuando llegues a el, haz que ese ultimo elemento tenga como siguiente a l2.

Para recorrer una lista, tomas el primer elemento e iteras ( por ejemplo, while ) hasta que el puntero al siguiente sea NULL, en cuyo caso, terminas de iterar.

Caso especial podria ser si una o ambas listas estan vacias.
__________________
Visita mi perfil en LinkedIn
  #3 (permalink)  
Antiguo 04/11/2011, 19:57
 
Fecha de Ingreso: diciembre-2006
Mensajes: 213
Antigüedad: 17 años, 4 meses
Puntos: 3
Respuesta: unir listas simplemente enlzadas en una sola

Hola,

Muchas gracias por la respuesta, precisament iba a publicarles el código que estoy ocupando pero que me sale el error "violacion de segmento"

Código C:
Ver original
  1. lista_t *UnirListas(lista_t *l1,lista_t *l2) {
  2.   while (l1 != NULL) {
  3.     l1 = l1->sig;
  4.   }
  5.   l1->sig=l2;
  6.   return l1;
  7. }

Ahora desdel el main hago esto:

Código C:
Ver original
  1. lista1=UnirListas(lista1,lista2);

Me podrían indicar dónde esta mi error por favor?

Nota:Ambas listas no están vacías en mi caso

Última edición por nh2006; 04/11/2011 a las 20:03
  #4 (permalink)  
Antiguo 04/11/2011, 21:30
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: unir listas simplemente enlzadas en una sola

El ciclo que hiciste saldra cuando l1 valga NULL. No tiene sentido hacer l1->sig despues de eso.

El ciclo tiene que frenar cuando este en el ultimo elemento de la lista, no cuando esté fuera de ella.
__________________
Visita mi perfil en LinkedIn
  #5 (permalink)  
Antiguo 04/11/2011, 21:54
 
Fecha de Ingreso: diciembre-2006
Mensajes: 213
Antigüedad: 17 años, 4 meses
Puntos: 3
Respuesta: unir listas simplemente enlzadas en una sola

Muchas gracias amigo, no había comprendido bien el algoritmo, era de moverse al último tal cual lo hacer a la hora de agregarle elementos a una cola.

Saludos
  #6 (permalink)  
Antiguo 05/11/2011, 00:09
 
Fecha de Ingreso: septiembre-2011
Mensajes: 16
Antigüedad: 12 años, 7 meses
Puntos: 7
Respuesta: unir listas simplemente enlzadas en una sola

Otro error es que estas recorriendo la lista con el único apuntador al primero de la lista (l1), es decir los elementos anteriores se perderán.

Aqui un código que funciona, saludos...

Código C:
Ver original
  1. lista_t *UnirListas (lista_t *l1, lista_t *l2){
  2.    lista_t *p;
  3.    if (l1 == NULL){  /*Si lista1 esta vacia...*/
  4.       l1 = l2;
  5.    }
  6.    else{
  7.         if (l2 != NULL){  /*Si lista2 no esta vacia...*/
  8.            p = l1;           /*Buscar ultimo nodo (p) de lista1*/
  9.            while (p->sig != NULL)
  10.               p = p->sig;
  11.            /*Ahora, se enlaza lista2 despues de ultimo (p)*/
  12.            p->sig = l2;         /*ultimo (p) apunta a lista2*/
  13.         }
  14.    }
  15.    return l1;     /*retorna lista1*/
  16. }
  #7 (permalink)  
Antiguo 07/11/2011, 10:43
 
Fecha de Ingreso: diciembre-2006
Mensajes: 213
Antigüedad: 17 años, 4 meses
Puntos: 3
Respuesta: unir listas simplemente enlzadas en una sola

Hola vladimirgude,

Excelente aporte, muchas gracias, no tomaba en cuenta ese error que mencionas, tu código mucho mas depurado.

Saludos

Etiquetas: listas, struct
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:09.