En este artículo, vamos a aprender a eliminar el Node medio de la lista enlazada circular en Java. El enfoque que vamos a seguir para este programa es, primero calculamos el número de Nodes en la lista y luego dividimos el número de Nodes por 2 para obtener el Node medio de la lista.
Algoritmo
Caso 1 : la lista está vacía
- Entonces simplemente regrese de la función.
Caso 2 : la lista tiene un solo Node
- Significa cabeza == cola y luego cabeza y cola asignadas iguales a nulo.
Caso 3 : la lista tiene solo dos Nodes
- Significa el Node medio de la lista en 1 posición. En este caso, también tenemos que modificar la cabeza y la cola. La cabeza se convierte en cola y la cola. La siguiente también se convierte en cola.
Caso 4 : la lista tiene más de dos Nodes
- Significa que la posición del Node medio es mayor que 1. En este caso, definimos los dos Nodes temp y prev . Asigne la cabeza a la temperatura.
- Luego recorra la lista usando temp hasta el Node medio. En cada iteración asigne prev = temp y temp = temp.next
- Ahora temp apunta al Node medio y prev apunta al Node anterior del Node medio.
- Luego simplemente establezca prev.next=temp.next y temp=null,
Java
// Java Program to Delete a // Node From the Middle of the // Circular Linked List class CLinkedList { class Node { int data; Node next; } private static int size; // head points first node and // tail points to last node private Node head, tail; CLinkedList() { this.head = null; this.tail = null; size = 0; } public void addNode(int d) { // create a empty node Node n = new Node(); // list is empty if (this.head == null) { n.data = d; this.head = n; this.tail = n; n.next = this.head; } // list has one node or more than one nodes else { n.data = d; tail.next = n; tail = n; tail.next = head; } size++; } public void deleteNodeMiddle() { int loc; Node temp, prev; // calculating position of middle node if (size % 2 == 0) { loc = size / 2; } else { loc = (size / 2) + 1; } // list is empty if (head == null) { return; } // list contains only one node else if (head == tail) { head = null; tail = null; } // list contains only two nodes else if (loc == 1) { head = tail; tail.next = tail; } // list contains more than two nodes else { temp = head; prev = null; int i = 1; while (i < loc) { prev = temp; temp = temp.next; i++; } prev.next = temp.next; temp = null; } size--; if (size < 0) { size = 0; } } public void display() { // displaying list if (head == null) { System.out.println("List is empty"); } else { Node temp = head; do { System.out.print(temp.data + " "); temp = temp.next; } while (temp != head); System.out.println(); } } } class Test { public static void main(String args[]) { CLinkedList c1 = new CLinkedList(); // adding node in linkedlist c1.addNode(10); c1.addNode(20); c1.addNode(30); c1.addNode(40); // displaying nodes after adding System.out.print("List="); c1.display(); // delete node in middle c1.deleteNodeMiddle(); // displaying linkedlist after deleting middle node System.out.print( "List after deleting middle node="); c1.display(); c1.deleteNodeMiddle(); // displaying linkedlist after deleting middle node System.out.print( "List after deleting middle node="); c1.display(); c1.deleteNodeMiddle(); // displaying linkedlist after deleting middle node System.out.print( "List after deleting middle node="); c1.display(); c1.deleteNodeMiddle(); // displaying linkedlist after deleting middle node System.out.print( "List after deleting middle node="); c1.display(); } }
Producción
List=10 20 30 40 List after deleting middle node=10 30 40 List after deleting middle node=10 40 List after deleting middle node=40 List after deleting middle node=List is empty
Publicación traducida automáticamente
Artículo escrito por patildhanu4111999 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA