es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Método de inserción en una lista doblemente enlazada circular en Java

Soy un principiante en Java. Estoy tratando de escribir un programa que inserte un nodo en una posición dada y muestre toda la lista enlazada. Sin embargo, parece que mis nodos no se están insertando y cuando muestro la lista enlazada solo se muestra el valor del primer nodo. ¿Alguien podría explicarme dónde me equivoqué?

Aquí, la ubicación es la posición del índice. El índice comienza en 0 y termina con tamaño-1, al igual que un arreglo.

Código para inserción

public void insertIntoCircularDoublyLinkedList(int ubicacion, int num) {
    Nodo node = new Nodo();
    Nodo tempNode = head;
    int indice = 0;

    while (indice < ubicacion){
        tempNode = tempNode.next;
        indice++;
    }

    node.prev = tempNode.prev;
    node.next = tempNode;
    tempNode.prev.next = node;
    tempNode.prev = node;
    size++;
}

Código para recorrido

void recorrerCDLL() {
    if (head != null) {
        Nodo tempNode = head;
        for (int i=0; i < size; i++) {
            System.out.print(tempNode.valor);
            if (i != size - 1) {
                System.out.print(" -> ");
            }
            tempNode = tempNode.next;
        }
    } else {
        System.out.println("La CDLL no existe.");
    }
    System.out.println();
}

Método principal

public static void main(String[] args) {
    CircularDoublyLinkedList CDLL = new CircularDoublyLinkedList();
    CDLL.createCircularDoublyLinkedList(8);
    CDLL.insertIntoCircularDoublyLinkedList(1, 1);
    CDLL.insertIntoCircularDoublyLinkedList(2, 2);
    CDLL.insertIntoCircularDoublyLinkedList(3, 3);
    CDLL.insertIntoCircularDoublyLinkedList(4, 4);

    CDLL.recorrerCDLL();
}

Salida:

8 -> 0 -> 0 -> 0 -> 0
Tags:  ,

Answer

  1. Avatar for davy.ai

    El código de inserción proporcionado parece estar correcto. Sin embargo, en el método principal, se crea un CDLL con solo un nodo utilizando el método ‘createCircularDoublyLinkedList(8)’. Esto significa que el tamaño del CDLL es solo 1 y no es posible insertar nodos en las ubicaciones 1, 2, 3 y 4, ya que estas ubicaciones no existen en el CDLL.

    Para insertar nodos en posiciones distintas a la cabeza (posición 0), necesitamos crear un CDLL con más de un nodo. Por lo tanto, sugiero crear un CDLL con algunos nodos utilizando el método ‘createCircularDoublyLinkedList’ y luego intentar insertar nodos en diferentes posiciones.

    Además, en el método de recorrido, la condición del bucle debe cambiarse de ‘i<size’ a ‘i<size’, ya=”” que=”” el=”” último=”” nodo=”” no=”” debe=”” tener=”” una=”” flecha=”” “-=””>” después de él.

    Método principal actualizado:

    public static void main(String[] args) {    
    CircularDoublyLinkedList CDLL = new CircularDoublyLinkedList();   
    CDLL.createCircularDoublyLinkedList(8,9,10); 
    CDLL.traverseCDLL();
    
    CDLL.insertIntoCircularDoublyLinkedList(1, 1);
    CDLL.insertIntoCircularDoublyLinkedList(2, 2);
    CDLL.insertIntoCircularDoublyLinkedList(3, 3);
    CDLL.insertIntoCircularDoublyLinkedList(4, 4);
    
    CDLL.traverseCDLL();
    }
    

    Salida:
    8 -> 9 -> 10
    8 -> 1 -> 2 -> 3 -> 4 -> 9 -> 10
    </size’,>

Comments are closed.