Programa Java para eliminar un Node de la mitad de la lista circular enlazada

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. 

Before removing middle elementAfter removing middle element

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *