En C ++, podemos insertar un nuevo nodo en una lista vinculada de tres maneras:
Hablemos sobre cómo hacer cada uno de los métodos de inserción de la lista vinculada uno por uno.
Al comienzo de la lista vinculada
Para agregar cualquier nodo al inicio de la lista vinculada, tenemos que seguir estos pasos:
El siguiente sería nulo si este nuevo nodo es el primer nodo en la lista vinculada.
Al final de la lista vinculada
Para agregar cualquier nodo al final de la lista vinculada, tenemos que seguir estos pasos:
Después de un nodo dado en la lista vinculada
Para agregar cualquier nodo en la enésima posición de la lista vinculada, tenemos que seguir estos pasos:
Implementación del programa C ++ para la inserción del nodo en la lista vinculada:
// Complete el programa para la inserción en una lista vinculada en C++
#incluir
usando el espacio de nombres STD;
nodo de clase
público:
datos int;
Nodo *siguiente;
;
void insertAtBeginningLinkedList (nodo ** headNode, int data)
// crear dinámicamente memoria para este nuevonode
Nodo* newnode = new Node ();
newnode-> data = data;
newnode-> next = *headNode;
*headNode = newnode;
cout << newNode->datos << " inserted data successfully"
"En la lista vinculada" << endl;
void insertAtLastLinkedList (nodo ** headNode, int data)
Nodo* newnode = new Node ();
newnode-> data = data;
// El último nodo siempre apunta a NULL
newnode-> next = null;
// Si la lista vinculada estaba vacía
if (*headNode == null)
*headNode = newnode;
cout << newNode->datos << " inserted data successfully"
"En la lista vinculada" << endl;
devolver;
Nodo * tempnode = * headNode;
// llegar al último nodo de la lista vinculada
while (tempnode-> Siguiente!= Nulo)
tempnode = tempnode-> next;
// Asignar Newnode al siguiente nodo
tempnode-> next = newnode;
cout << newNode->datostamaño ++;
tamaño de retorno;
void insertAfternthnodelinkedlist
(int n, int data, nodo ** HeadNode)
int loc = n;
int size = longitudOfLinkedList (*headNode);
// No se permiten insertos de posición negativa
// La inserción no es posible si la ubicación es más grande
// que el tamaño de la lista vinculada.
if (n < 0 || n > tamaño)
cout << "Insert position not valid";
if (n == 0)
insertAtBeginningLinkedList (HeadNode, Data);
demás
Nodo* newnode = new Node ();
newnode-> data = data;
newnode-> next = null;
// usó tempnode para iterar a través de la lista vinculada
Nodo * tempnode = * headNode;
// atraviesa hasta llegar al enésimo nodo
mientras (-n)
tempnode = tempnode-> next;
// al siguiente nodo en el enésimo nodo, asigne el siguiente.
newnode-> next = tempnode-> next;
// Asignar enésimo nodo al lado de este nuevo nodo
tempnode-> next = newnode;
// Newnode insertado
cout << newNode->datos << " inserted data after index " <
void printLinkedList (nodo* nodo)
cout << "\n";
// mientras que la condición se detendrá cuando nodo == nulo
mientras (nodo!= Nulo)
cout << node->datos << " "; node = node->próximo;
cout << "\n" << endl;
int main ()
Nodo* headNode = null;
insertAtBeginningLinkedList (y HeadNode, 10);
insertAtBeginningLinkedList (y HeadNode, 9);
insertAtBeginningLinkedList (& HeadNode, 8);
printLinkedList (nodo de cabeza);
InsertAtLastLinkedList (& HeadNode, 11);
InsertAtLastLinkedList (& HeadNode, 12);
InsertAtLastLinkedList (& HeadNode, 14);
printLinkedList (nodo de cabeza);
// inserta datos en la posición particular
insertAfternthNodElinkedList (5, 17 y HeadNode);
insertAfternThnodElinkedList (1, 11 y HeadNode);
printLinkedList (nodo de cabeza);
regresar 0;
Producción:
10 datos insertados con éxito en la lista vinculada
9 datos insertados con éxito en la lista vinculada
8 datos insertados con éxito en la lista vinculada
8 9 10
11 datos insertados al final
12 datos insertados al final
14 datos insertados al final
8 9 10 11 12 14
17 Datos insertados después del índice 5
11 datos insertados después del índice 1
8 11 9 10 11 12 17 14
Explicación:
El código define un nodo con nombre de clase que tiene dos propiedades: (1) datos (de tipo int) para almacenar el valor del nodo, y (2) siguiente (de nodo de tipo*) para almacenar el puntero al siguiente nodo en la lista.
El programa implementa tres funciones para insertar los nodos en la lista vinculada:
Un datos enteros y un doble puntero al nodo principal de la lista vinculada se pasan a la función InsertATBeginningLinkedList (). Usando el nuevo nodo (), la memoria de un nuevo nodo se crea dinámicamente y los datos se asignan al nuevo nodo. Más tarde, actualiza el nodo principal para que sea el nuevo nodo configurando el siguiente puntero del nuevo nodo en el nodo anterior anterior.
Un datos enteros y un doble puntero al nodo principal de la lista vinculada se pasan al método InsertAtLastLinkedList (). Usando el nuevo nodo (), la memoria de un nuevo nodo se crea dinámicamente y los datos se asignan al nuevo nodo. El siguiente puntero del nuevo nodo se establece en NULL. Si la lista vinculada está vacía, el nodo principal se actualiza para servir como el nuevo nodo. En cualquier otro caso, atraviesa la lista vinculada hasta que alcanza el último nodo, momento en el que establece el nuevo nodo al siguiente puntero del último nodo.
La función InsertAfternThnodeLinkedList () agrega un nuevo nodo con los datos dados después del nodo nth en una lista vinculada. La lista vinculada y su tamaño, así como la posición n y los datos que se insertarán, se pasan como argumentos. Primero, la función verifica si la ubicación n es correcta (i.mi., no negativo y no más grande que el tamaño de la lista vinculada). Se imprimen los mensajes de error si la posición no es válida. Si la posición es válida, la función construye un nuevo nodo, establece sus datos y los siguientes campos, y luego busca iterativamente a través de la lista vinculada para encontrar el enésimo nodo. Luego, vincula el enésimo nodo y el nuevo nodo cambiando los siguientes punteros del enésimo nodo y el nuevo nodo.
La longitud de la lista vinculada se devuelve mediante la función LongOfLinkedList () que acepta un puntero al nodo Head de la lista vinculada. Esto se logra en bucle alrededor de la lista vinculada, contando los nodos y devolviendo el recuento.
En el método principal, el programa crea una lista vinculada vacía, luego llama a los tres métodos de inserción con diversos datos y entradas de posición. Finalmente, imprime la lista vinculada para ver los resultados.
Conclusión
Dependiendo de dónde se realice una inserción en una lista vinculada, hay varios problemas de complejidad temporal y espacial. Como una operación extremadamente efectiva, la inserción al comienzo de la lista tiene una complejidad de tiempo constante de O (1) y una complejidad espacial constante de O (1). En el peor escenario, insertar al final de la lista lleva el tiempo lineal o (n), donde n es el número total de entradas de la lista. Esto es para que podamos descubrir el nodo de cola atravesando la lista. En el peor de los casos, insertar en una posición específica en la lista también lleva tiempo lineal, que es o (n), porque tenemos que pasar por la lista para encontrar el nodo en la posición específica. No importa cómo se agregan, las listas vinculadas son una forma flexible y dinámica de almacenar los datos que se pueden usar de muchas maneras diferentes.