Tutoriales

Cómo eliminar un nodo en la lista vinculada C++

Una lista enlazada es básicamente una combinación de dos cosas: una parte de información y una parte de dirección. La parte de la dirección, también conocida como puntero o vínculo del siguiente nodo, almacena la dirección del siguiente nodo. Una lista enlazada es básicamente una estructura de datos lineal que almacena datos dinámicamente a través de punteros a los que se puede acceder fácilmente mediante el puntero del nodo anterior.

Los nodos de la lista enlazada son los siguientes:

En comparación con una matriz, una lista enlazada no es una estructura de datos secuenciales porque es una estructura de datos almacenada dinámicamente. Almacena todos los datos en diferentes ubicaciones de memoria, a las que podemos acceder a través del puntero de nodo que almacena la dirección de los datos.

Esta forma de almacenar datos tiene los siguientes beneficios:

1. No tenemos un tamaño de memoria predefinido como una matriz, lo que genera una gran cantidad de memoria desperdiciada.

2. En una matriz, si definimos la memoria una vez, no podemos disminuirla o aumentarla según nuestros requisitos. Pero en una lista enlazada, podemos agregar o quitar nodos según nuestras necesidades.

La lista enlazada se ve así:

Cada lista enlazada tiene un nodo principal, que es el primer nodo de la lista enlazada, y un nodo final, que se encuentra al final de la lista enlazada. A partir del nodo final, la lista enlazada que apunta al siguiente nodo termina, porque almacena una dirección vacía, que no tiene ningún significado. Si alguna lista enlazada tiene solo un nodo, significa que el nodo principal y el nodo final son los mismos.

Eliminar lista enlazada:

Como se muestra a continuación, podemos eliminar nodos de la lista vinculada de tres maneras:

1. Eliminar el primer nodo de la lista enlazada

2. Eliminar el último nodo de la lista enlazada

3. Eliminar un nodo de ubicación específico

Explicación de todos estos conceptos:

1. Elimine el primer nodo (nodo principal) de la lista vinculada: –

Eliminar el primer nodo de la lista vinculada significa eliminar el nodo principal (el primer nodo) de la lista vinculada. Para ello, debemos seguir el siguiente procedimiento:

Una. Tenemos que crear un puntero (temporal).

b. La dirección del nodo principal se copia en el puntero (temporal).

C. Ahora, hemos almacenado la dirección del nodo principal. Por lo tanto, podemos declarar el siguiente nodo del encabezado como el primer nodo de la lista enlazada.

Eliminar el primer nodo significa que el nodo principal es tan simple como:

Código C++ para eliminar el primer nodo de la lista vinculada:

vacío eliminar LinkedListFirstNode()
{
nodo *nodo temporal=nuevo nodo;
nodo temporal=nodo principal;
nodo principal=nodo principal->próximo;
eliminar nodo temporal;
}

2. Eliminar el último nodo (nodo de cola):

Eliminar el nodo principal de una lista enlazada es simple. Pero cuando queremos eliminar el último nodo o el nodo de cola de la lista enlazada, tenemos que transferir el puntero nulo del nodo de cola al nodo anterior del nodo de cola, que tiene la dirección del nodo de cola.

Para lograr esto, tenemos que usar dos nodos temporales y atravesar la lista enlazada. Cuando finaliza el recorrido de la lista enlazada, un nodo temporal apuntará al nodo actual y el otro nodo temporal apuntará al nodo anterior. Ahora que ambos nodos deseados han resuelto los detalles que tenemos, podemos eliminar el nodo de cola mientras movemos el puntero nulo al nodo anterior.

Código C++ para eliminar el último nodo de la lista enlazada:

vacío Eliminar LinkedListLastNode()
{
nodo *nodo actual=nuevo nodo;
nodo *nodo anterior=nuevo nodo;
nodo actual=nodo principal;
a pesar de que(nodo actual->próximo!=Inválido)
{
nodo anterior=nodo actual;
Actual=nodo actual->próximo;
}
Cola=nodo anterior;
nodo anterior->próximo=Inválido;
eliminar el nodo actual;
}

3. Eliminar un nodo en una ubicación específica:

Para eliminar un nodo de cualquier posición en la lista enlazada, debemos ingresar la posición específica del nodo que se eliminará. Para definir un nodo de posición específico, usamos dos nodos temporales, tal como lo hicimos cuando eliminamos el nodo de cola. Recorremos toda la lista enlazada hasta que no obtenemos el nodo de ubicación específico que queremos eliminar. Después de obtener ese nodo, otro nodo temporal guardará la dirección del nodo anterior del nodo actual. Ahora, dado que tenemos los detalles de ambos nodos, podemos transferir fácilmente la dirección del nodo de eliminación al nodo de dirección anterior, que ahora apuntará al siguiente nodo, al igual que el método anterior de eliminar el último nodo.

Código C++ para eliminar el nodo n de la lista vinculada:

vacío eliminar NthPositionNode(entero número de posición)
{
nodo *nodo actual=nuevo nodo;
nodo *nodo anterior=nuevo nodo;
nodo actual=nodo principal;
por(entero contando=1;próximo;
}
nodo anterior->próximo=nodo actual->próximo;
}

programa: A continuación se muestra un programa en C++ que elimina el nodo n de una lista enlazada

#incluir

Usar estándares de espacio de nombres;

clase LinkListNode
{
listado:
entero información;
Nodo de lista enlazada *puntero;
};
calculo de longitud interna(Nodo de lista enlazada* nodo){

entero contando =;

a pesar de que(nodo!=Inválido){
nodo = nodo->puntero;
contando++;
}
devolver contando;
}

vacío insertar(Nodo de lista enlazada** nodo principal, entero información){
Nodo de lista enlazada* nuevo nodo = nuevo LinkListNode();

nuevo nodo->información = información;
nuevo nodo->puntero =*nodo principal;
*nodo principal = nuevo nodo;
}

vacío eliminar método de nodo(entero contando, Nodo de lista enlazada** nodo principal){
Nodo de lista enlazada* nodo temporal =*nodo principal;
Nodo de lista enlazada* nodo anterior;

entero longitud = calculo de longitud(*nodo principal);

si(contar la longitud){
Tribunal <«Eliminar un nodo de lista enlazada no tiene ningún efecto»<puntero;
Tribunal <información <«Eliminó el primer nodo del enlace»<puntero;
}

// Esta línea actualizará el puntero del nodo anterior
//Usar el enésimo puntero de nodo de lista enlazada
nodo anterior->puntero = nodo temporal->puntero;

// Este código eliminará el nodo n de la lista enlazada
Tribunal <información <«borrado»<Finalizar;;
Eliminar(nodo temporal);
}

vacío mostrar lista enlazada(Nodo de lista enlazada* cosa){

Tribunal < : «;

// Esta condición se detendrá cuando la lista enlazada llegue al final
while (elemento != NULL) {
Tribunal
}
cout << endl;
}

interno()
{
nodo de lista enlazada * headnode = NULL;

insert(&headNode, 29);
insert(&headNode, 34);
insert(&headNode, 23);
insert(&headNode, 27);
insert(&headNode, 31);
insert(&headNode, 50);

mostrarListaEnlazada(headNode);

cout <<"\n eliminar número de nodo 3 = «;
deleteNodeMethod(3, &headNode);

cout <<"\n después de eliminar el número de nodo 3, La lista enlazada será =«;
mostrarListaEnlazada(headNode);

cout <<"\n eliminar número de nodo 5 = «;
deleteNodeMethod(5, &headNode);

cout <<"\n después de eliminar el número de nodo 5, La lista enlazada será =«;
mostrarListaEnlazada(headNode);

devolver 0;
}

producción:

mostrar lista enlazada => :503127233429

eliminar número de nodo 3=27 eliminado

Después de eliminar el número de nodo 3, La lista enlazada será =
mostrar lista enlazada => :5031233429

eliminar número de nodo 5=29 eliminado

Después de eliminar el número de nodo 5, La lista enlazada será =
mostrar lista enlazada => :50312334

En conclusión:

En este blog, analizamos diferentes formas de eliminar el concepto de lista enlazada y cómo codificarlo en un programa C++. Finalmente, examinamos el concepto principal de eliminar nodos de ubicaciones específicas. El concepto de lista enlazada siempre es importante porque así es como se usa la memoria del sistema operativo y tiene muchos beneficios en comparación con las matrices.

LEER  Arrancar desde una unidad USB en VirtualBox en Linux

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba