Cómo eliminar un nodo antes de un nodo particular en una sola lista vinculada

¡Esto es facil!

Entonces, ¿tiene un nodo específico de una lista vinculada y desea eliminar el siguiente nodo?

Todo lo que tiene que hacer es hacer que el nodo especificado apunte al nodo, que está al lado del siguiente nodo inmediato.

Lo que quiero decir es:

tienes una lista …… A-> B-> C, y tenemos acceso directo a A, así que ahora, tenemos que eliminar B, y la lista se verá como …… A-> C

Cada nodo tiene 2 campos, la porción de datos y la porción de dirección.

El nodo A tiene la dirección del nodo B y el nodo B tiene la dirección del nodo C.

Entonces, todo lo que tenemos que hacer es poner la dirección del Nodo C en el lugar de la dirección del Nodo B en la parte de la dirección del Nodo A.

¿Cómo se puede hacer eso?

Aquí está el psuedocode:

temp = A.siguiente;
A.next = temp.next;
libre (temp);

Explicación:

Un nodo se define más o menos así

nodo de estructura {
datos int;
struct node * next;
};

almacenamos el nodo al lado de A en una variable temporal “temp”

Ahora, el paso principal:

A.next = temp.next

Lo que hace es almacenar la dirección almacenada en el siguiente nodo de temp (que es del Nodo C, obviamente), en el siguiente campo del Nodo A. Este paso establece un enlace entre el Nodo A y el Nodo C, y elimina el Nodo B de la lista vinculada.

Ahora, todo lo que tenemos que hacer es liberar la memoria ocupada por el Nodo B, ¡y free (temp) simplemente lo hace!

Puede consultar el siguiente enlace para obtener ayuda: Programa C para eliminar un nodo desde el frente, desde el final y desde cualquier posición en una Lista enlazada única.

Función para eliminar cualquier nodo de la lista vinculada.
void delete_any ()
{
clave int;

if (encabezado-> enlace == NULL)
{
printf (“\ nLista vacía vinculada. No se puede eliminar. \ n”);
}
más
{
printf (“\ nIntroduzca los datos del nodo que se va a eliminar:”);
scanf (“% d”, & clave);

ptr = encabezado;
while ((ptr-> link! = NULL) && (ptr-> data! = key))
{
ptr1 = ptr;
ptr = ptr-> enlace;
}
if (ptr-> data == clave)
{
ptr1-> enlace = ptr-> enlace;
libre (ptr);
printf (“\ nNodo con datos% d eliminados. \ n”, clave);
}
más
{
printf (“\ nValue% d no encontrado. Eliminación no posible. \ n”, clave);
}
}

}

Camine por la lista hasta que encuentre un elemento que luego apunte al nodo que desea eliminar, y luego adjunte ese puntero siguiente al siguiente puntero del mismo elemento, y luego libere el elemento en sí (guarde el puntero en ese elemento ANTES de reajustar la lista).