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.
Java
// Java program to delete alternate // nodes of a linked list class LinkedList { // Head of list Node head; // Linked list Node class Node { int data; Node next; Node(int d) { data = d; next = null; } } void deleteAlt() { if (head == null) return; Node prev = head; Node now = head.next; while (prev != null && now != null) { // Change next link of previous node prev.next = now.next; // Free node now = null; // Update prev and now prev = prev.next; if (prev != null) now = prev.next; } } // Utility functions // Inserts a new Node at front // of the list. public void push(int new_data) { /* 1 & 2: Allocate the Node & Put in the data*/ Node new_node = new Node(new_data); // 3. Make next of new Node as head new_node.next = head; // 4. Move the head to point to // new Node head = new_node; } // Function to print linked list void printList() { Node temp = head; while(temp != null) { System.out.print(temp.data + " "); temp = temp.next; } System.out.println(); } // Driver code public static void main(String args[]) { LinkedList llist = new LinkedList(); /* Constructed Linked List is 1->2->3->4->5->null */ llist.push(5); llist.push(4); llist.push(3); llist.push(2); llist.push(1); System.out.println( "Linked List before calling deleteAlt() "); llist.printList(); llist.deleteAlt(); System.out.println( "Linked List after calling deleteAlt() "); llist.printList(); } } // This code is contributed by Rajat Mishra
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.
Java
/* Deletes alternate nodes of a list starting with head */ static Node 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; /* Recursively call for the new next of head */ head.next = deleteAlt(head.next); } // This code is contributed by Arnab Kundu
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