FlipFlopX
05/06/2010, 08:03
Buenas famigos, llevo toda la noche con un programilla en C y entre los manuales de listas enlazadas y ejemplos no consigo avanzar.
Básicamente es un procedimiento para borrar nodos de una lista enlazada, recibo el pid y me cargo el nodo que tenga ese pid. Lo que no consigo saber es como borrar un nodo intermedio o el final sin cargarme la lista, lo que tengo subrayado no me funciona ya que con eso si quiero eliminar el último nodo, elimino todos menos el inicial, y si quiero eliminar un nodo intermedio elimino el intermedio y el anterior, que lio :confused:
//////////////////PROCESO BORRAR//////////////////////////////
void borrar(int pid){
struct proceso *primero;
struct proceso *auxiliar;//Usamos para recorrer lista
struct proceso *anterior;
int i;
i=0;//Con este indice podemos ver la posicion del nodo si i=0 es que eliminamos primer nodo
auxiliar=lista;//cargamos lista en auxiliar;
anterior=lista;
while(auxiliar!=NULL){
if((pid==(auxiliar->pid))&&(i==0)){//BORRAMOS EL PRIMER ELEMENTO
lista=auxiliar->siguiente;
}
if(pid==(auxiliar->pid))
if(i!=0){//BORRAMOS CUALQUIER NODO PERO NO INICIAL
anterior->siguiente=auxiliar->siguiente;
}
i++;
auxiliar=auxiliar->siguiente;
}
if(i==0) printf("\nLa lista esta vacia!!");
}
Solucionado con:
CODE]//////////////////PROCESO BORRAR//////////////////////////////
void borrar(int pid){
struct proceso *primero;
struct proceso *auxiliar;//Usamos para recorrer lista
struct proceso *anterior;
int i;
i=0;//Con este indice podemos ver la posicion del nodo si i=0 es que eliminamos primer nodo
auxiliar=lista;//cargamos lista en auxiliar;
anterior=lista;
while(auxiliar!=NULL){
if((pid==(auxiliar->pid))&&(i==0)){//BORRAMOS EL PRIMER ELEMENTO
lista=auxiliar->siguiente;
}
if(pid==(auxiliar->pid))
if(i!=0){//BORRAMOS CUALQUIER NODO PERO NO INICIAL
anterior->siguiente=auxiliar->siguiente;
}
i++;
anterior=auxiliar;
auxiliar=auxiliar->siguiente;
}
if(i==0) printf("\nLa lista esta vacia!!");
} [/CODE]
Sigo sin entender bien las dichosas listas y no sé bien porque ahora me va..
Básicamente es un procedimiento para borrar nodos de una lista enlazada, recibo el pid y me cargo el nodo que tenga ese pid. Lo que no consigo saber es como borrar un nodo intermedio o el final sin cargarme la lista, lo que tengo subrayado no me funciona ya que con eso si quiero eliminar el último nodo, elimino todos menos el inicial, y si quiero eliminar un nodo intermedio elimino el intermedio y el anterior, que lio :confused:
//////////////////PROCESO BORRAR//////////////////////////////
void borrar(int pid){
struct proceso *primero;
struct proceso *auxiliar;//Usamos para recorrer lista
struct proceso *anterior;
int i;
i=0;//Con este indice podemos ver la posicion del nodo si i=0 es que eliminamos primer nodo
auxiliar=lista;//cargamos lista en auxiliar;
anterior=lista;
while(auxiliar!=NULL){
if((pid==(auxiliar->pid))&&(i==0)){//BORRAMOS EL PRIMER ELEMENTO
lista=auxiliar->siguiente;
}
if(pid==(auxiliar->pid))
if(i!=0){//BORRAMOS CUALQUIER NODO PERO NO INICIAL
anterior->siguiente=auxiliar->siguiente;
}
i++;
auxiliar=auxiliar->siguiente;
}
if(i==0) printf("\nLa lista esta vacia!!");
}
Solucionado con:
CODE]//////////////////PROCESO BORRAR//////////////////////////////
void borrar(int pid){
struct proceso *primero;
struct proceso *auxiliar;//Usamos para recorrer lista
struct proceso *anterior;
int i;
i=0;//Con este indice podemos ver la posicion del nodo si i=0 es que eliminamos primer nodo
auxiliar=lista;//cargamos lista en auxiliar;
anterior=lista;
while(auxiliar!=NULL){
if((pid==(auxiliar->pid))&&(i==0)){//BORRAMOS EL PRIMER ELEMENTO
lista=auxiliar->siguiente;
}
if(pid==(auxiliar->pid))
if(i!=0){//BORRAMOS CUALQUIER NODO PERO NO INICIAL
anterior->siguiente=auxiliar->siguiente;
}
i++;
anterior=auxiliar;
auxiliar=auxiliar->siguiente;
}
if(i==0) printf("\nLa lista esta vacia!!");
} [/CODE]
Sigo sin entender bien las dichosas listas y no sé bien porque ahora me va..