Dada una lista enlazada individualmente, a partir del segundo Node, elimine todos los Nodes alternativos de la misma. Por ejemplo, si la lista enlazada dada es 1->2->3->4->5 entonces su función debería convertirla a 1->3->5, y si la lista enlazada dada es 1->2-> 3->4 luego conviértalo a 1->3.
Método 1 (iterativo):
realice un seguimiento de la anterior del Node que se eliminará. Primero, cambie el siguiente enlace del Node anterior y muévase iterativamente al siguiente Node.
C++
// C++ program to remove alternate // nodes of a linked list #include <bits/stdc++.h> using namespace std; // A linked list node class Node { public: int data; Node *next; }; /* Deletes alternate nodes of a list starting with head */ void deleteAlt(Node *head) { if (head == NULL) return; /* Initialize prev and node to be deleted */ Node *prev = head; Node *node = head->next; while (prev != NULL && node != NULL) { /* Change next link of previous node */ prev->next = node->next; // Update prev and node prev = prev->next; if (prev != NULL) node = prev->next; } } /* UTILITY FUNCTIONS TO TEST fun1() and fun2() */ /* Given a reference (pointer to pointer) to the head of a list and an int, push a new node on the front of the list. */ void push(Node** head_ref, int new_data) { /* Allocate node */ Node* new_node = new Node(); /* Put in the data */ new_node->data = new_data; /* Link the old list off the new node */ new_node->next = (*head_ref); /* Move the head to point to the new node */ (*head_ref) = new_node; } /* Function to print nodes in a given linked list */ void printList(Node *node) { while (node != NULL) { cout << node->data << " "; node = node->next; } } // Driver code int main() { // Start with the empty list Node* head = NULL; /* Using push() to construct list 1->2->3->4->5 */ push(&head, 5); push(&head, 4); push(&head, 3); push(&head, 2); push(&head, 1); cout << "List before calling deleteAlt() "; printList(head); deleteAlt(head); cout << "List after calling deleteAlt() "; printList(head); return 0; } // This code is contributed by rathbhupendra
Producción:
List before calling deleteAlt() 1 2 3 4 5 List after calling deleteAlt() 1 3 5
Complejidad de tiempo: O(n) donde n es el número de Nodes en la lista enlazada dada.
Método 2 (recursivo):
el código recursivo utiliza el mismo enfoque que el método 1. El código recursivo es simple y breve, pero hace que la función recursiva O(n) llame a una lista vinculada de tamaño n.
C++
/* Deletes alternate nodes of a list starting with head */ void deleteAlt(Node *head) { if (head == NULL) return; Node *node = head->next; if (node == NULL) return; // Change the next link of head head->next = node->next; // Free memory allocated for node free(node); /* Recursively call for the new next of head */ deleteAlt(head->next); } // This code is contributed by rathbhupendra
Complejidad de tiempo: O(n)
Consulte el artículo completo sobre Eliminar Nodes alternativos de una lista vinculada para obtener más detalles.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA