Dev - C++ - Eliminar nodo

   
Vista:

Eliminar nodo

Publicado por pablo (8 intervenciones) el 25/10/2015 07:18:48
Queria saber como hago para elimnar un nodo de una lista en una posicion que me ingresan por parametro?
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
Imágen de perfil de Cobre2Software.com

Eliminar nodo

Publicado por Cobre2Software.com contacto@cobre2software.com (7 intervenciones) el 25/10/2015 11:23:00
Hola Pablo, si tienes una lista, por ejemplo [3,6,1,9,5] y tienes la posición 1 que borrar o por ejemplo num como variable (empieza en 0, luego 0, 1) El 6, seria ese elemento a borrar y para borrarlo se "desplaza" el resto de la lista una posición a la izquierda desde la posición 1, es decir, se puede de hacer de muchas formas pero una forma rápida es guardar lista[num]=lista[num+i] donde i se inizializa a 1 y englobar esto en un for que vaya hasta el ultimo elemento de tu lista.

Un saludo
www.cobre2software.com
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

Eliminar nodo

Publicado por aguml (305 intervenciones) el 25/10/2015 22:49:46
Ese no es el modo.
Imagina que el nodo es:
1
2
3
4
5
typedef struct Persona {
   char nombre[25];
   char apellido [25];
   Persona *sig;
}*PERSONA;

Lo que tienes que hacer es copiar los datos del siguiente en el que deseas borrar y liberas la memoria del que era el siguiente. O sea, imagina esto:
Miembro 1
Nombre=Paco
Apellido=Pérez
Sig=Miembro 2

Miembro 2
Nombre=Juan
Apellido=López
Sig=Miembro 3
...
...

Queremos borrar el miembro 2 así que para empezar necesitamos guardar nos en una variable el valor que tiene el miembro 2 en sig. Luego copiamos el contenido del miembro 3 en el miembro 2 y luego liberamos la memoria que ya no necesitamos y que tenemos su dirección guardada en una variable. Hay otros modos pero este es muy rápido.
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

Eliminar nodo

Publicado por aguml (305 intervenciones) el 25/10/2015 23:44:48
Otro modo es si tienes que eliminar por ejemplo el 2 coger y recorres la lista empezando desde el principio hasta justo el anterior al que queremos borrar y haces:
1
2
3
4
5
if (P->sig != NULL){
   PERSONA *dir=P->sig;
   P->sig=P->sig->sig;
   free (dir);
}

Muy importante comprobar que P->sig no sea NULL ya que eso indicaría que es el último y no podemos borrar el siguiente porque no existe. Por eso el condicional
Cada método tiene sus ventajas. Este solo necesita redirigir un puntero pero hay que recorrer toda la lista hasta dar con el miembro deseado. La otra puedes ir directamente al lugar que quieres borrar pero tienes que copiar todas las variables aunque se puede usar memcpy y copiar todo el bloque de memoria sin ir miembro por miembro de la estructura.
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