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

Cómo eliminar un nodo en una lista vinculada C ++
Una lista vinculada es básicamente una combinación de dos cosas: la parte de la información y la parte de la dirección. La parte de la dirección, también llamada Pointer o Next Node Link, almacena la dirección del siguiente nodo. La lista vinculada es básicamente una estructura de datos lineal que almacena datos dinámicamente a través de punteros a los que el puntero de nodo anterior puede acceder fácilmente.

El nodo de la lista vinculada se ve así:

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

Esta forma de almacenar datos tiene estos beneficios:

1. No tenemos un tamaño de memoria predefinido como una matriz, lo que conduce a muchos desechos de memoria.

2. En una matriz, si definimos una memoria de tiempo, no podemos disminuirla o aumentarla de acuerdo con nuestros requisitos. Pero en una lista vinculada, podemos aumentar o disminuir los nodos de acuerdo con nuestros requisitos.

La lista vinculada se ve así:

Cada lista vinculada tiene un nodo de encabezado que es el primer nodo de la lista vinculada; y un nodo de cola que está presente al final de la lista vinculada. Desde el nodo de cola, la lista vinculada que apunta al siguiente nodo ha terminado porque almacena la dirección nula, lo que no significa nada. Si alguna lista vinculada tiene solo un nodo, entonces significa que el nodo de encabezado y el nodo de cola son los mismos.

Eliminación de una lista vinculada:

Como se da a continuación, podemos eliminar un nodo de una lista vinculada de tres maneras:

1. Eliminar el primer nodo de la lista vinculada

2. Eliminar el último nodo de la lista vinculada

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

Explicación de todos estos conceptos:

Elimine el primer nodo de la lista vinculada (el nodo de encabezado):-

Para eliminar el primer nodo de la lista vinculada significa eliminar el nodo del encabezado (primer nodo) de la lista vinculada. Para hacer esto, tenemos que seguir el siguiente procedimiento:

a. Tenemos que crear un puntero (temporal).

b. La dirección del nodo de encabezado se copia al puntero (temporal).

C. Ahora, hemos almacenado la dirección del nodo de encabezado. Entonces, podemos declarar el siguiente nodo del encabezado como un primer nodo de la lista vinculada.

Eliminar el primer nodo significa que el nodo de encabezado es simple:

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

void deletelinkedlistfirstnode ()

nodo *temporyNode = nuevo nodo;
temporyNode = headNode;
headNode = headNode-> next;
eliminar temporyNode;

Eliminar el último nodo (nodo de cola):

Eliminar el nodo de encabezado de la lista vinculada era simple. Pero cuando queríamos eliminar el último nodo o nodo de cola de la lista vinculada, tenemos que transferir el puntero nulo desde el nodo de cola al nodo anterior de la cola, que tiene la dirección del nodo de cola.

Para implementar esto, debemos usar dos nodos temporales y ejecutar la lista vinculada. Cuando termina la lista vinculada de recorrido, el nodo temporal apuntará al nodo actual y otro nodo temporal apuntará al nodo anterior. Ahora, ambos nodos requeridos abordan los detalles que tenemos y podemos eliminar el nodo de cola mientras cambia el puntero nulo al nodo anterior.

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

void deletElinkedListLastNode ()

nodo *currentNode = nuevo nodo;
nodo *AnteriorNode = nuevo nodo;
currentNode = headNode;
while (currentNode-> Siguiente!= Nulo)

AnteriorNode = CurrentNode;
actual = currentNode-> next;

cola = Anteriornode;
Anteriornode-> next = null;
Eliminar CurrentNode;

Eliminar el nodo en una posición específica:

Para eliminar un nodo desde cualquier lugar de la lista vinculada, debemos ingresar la posición particular del nodo que queremos eliminar. Para definir el nodo de posición específico, usamos dos nodos temporales, como lo hicimos mientras eliminamos el nodo de cola. Traveremos toda la lista vinculada hasta que no obtengamos el nodo de posición específico que queremos eliminar, y después de obtener ese nodo, el otro nodo temporal contendrá la dirección del nodo anterior del nodo actual. Ahora, como tenemos ambos detalles del nodo, podemos cambiar 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 en el método eliminado anterior del último nodo.

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

void DeletenthPositionNode (int posicionNumber)
nodo *currentNode = nuevo nodo;
nodo *AnteriorNode = nuevo nodo;
currentNode = headNode;
para (int count = 1; iAnteriorNode = CurrentNode;
actualnode = currentNode-> next;

AnteriorNode-> next = currentNode-> next;

Programa C ++ para eliminar un enésimo nodo de la lista vinculada

#incluir
usando el espacio de nombres STD;
clase LinkedListNode
público:
int info;
LinkedListNode *puntero;
;
int longcalCalation (linkedListNode* nodo)
int count = 0;
mientras (nodo!= Nulo)
nodo = nodo-> puntero;
contar ++;

recuento de retorno;

Void Insert (LinkedListNode ** HeadNode, int info)
LinkedListNode* newNode = new LinkedListNode ();
newnode-> info = info;
Newnode-> Pointer = *HeadNode;
*headNode = newnode;

void deletenodemethod (int count, LinkedListNode ** HeadNode)
LinkedListNode * temporaryNode = * headNode;
LinkedListNode* AnteriorNode;
int longitud = longitudcalcule (*headNode);
Si (contar < 1 || count > longitud)
cout << "Deletion of linked list node is not valid" << endl;
devolver;

// Esta fucntion eliminará el primer nodo de la lista vinculada
if (count == 1)
*headNode = (*headNode)-> puntero;
cout << temporaryNode->información << " deleted the linked first node" << endl;
Eliminar (temporyNode);
devolver;

// esto mientras el bucle se detendrá cuando se alcanza en el
// final de la lista vinculada
while (--cunt)
AnteriorNode = temporaryNode;
temporyNode = temporaryNode-> puntero;

// Esta línea actualizará el puntero de nodo anterior
// con el enésimo puntero de nodo de lista vinculada
AnteriorNode-> Pointer = temporyNode-> Pointer;
// Este código eliminará el nodo nth de la lista vinculada
cout << temporaryNode->información << " deleted" << endl;;
Eliminar (temporyNode);

void displayLinkedList (LinkedListNode* item)
cout << "\nDisplaying LinkedList => : ";
// Esta condición se detendrá cuando LinkedList llegue al final
Mientras (Artículo!= Nulo)
cout << item->información << " ";
elemento = elemento-> puntero;

cout << endl;

int main ()
LinkedListNode* headNode = null;
insertar (& HeadNode, 29);
insertar (y HeadNode, 34);
insertar (y HeadNode, 23);
insertar (y HeadNode, 27);
insertar (y HeadNode, 31);
insertar (y HeadNode, 50);
DisplayLinkedList (HeadNode);
cout << "\n Deleting node number 3 = ";
Deletenodemethod (3, y HeadNode);
cout << "\n After delete node number 3, linked list will be =";
DisplayLinkedList (HeadNode);
cout << "\n Deleting node number 5 = ";
Deletenodemethod (5, y HeadNode);
cout << "\n After delete node number 5, linked list will be =";
DisplayLinkedList (HeadNode);
regresar 0;

Producción:

Mostrar LinkedList =>: 50 31 27 23 34 29
Eliminar el número de nodo 3 = 27 eliminado
Después de eliminar el número 3, la lista vinculada será =
Mostrar LinkedList =>: 50 31 23 34 29
Eliminar el nodo número 5 = 29 eliminado
Después de Delete Node Number 5, la lista vinculada será =
Mostrar LinkedList =>: 50 31 23 34

Conclusión:

En este blog, hemos estudiado diferentes formas de eliminar los conceptos de la lista vinculada y cómo podemos codificar en un programa C ++ también. Finalmente, estudiamos los conceptos principales de eliminar el nodo de una posición particular. Los conceptos de la lista vinculada siempre son importantes porque esta es la forma de jugar con la memoria del sistema operativo y tiene muchos beneficios en comparación con la matriz.