Pregunta

Me gustaría crear una lista circular / cíclico unido donde la cola de la lista sería señalar de nuevo a la cabeza de la lista. Así que puedo usar java.util.LinkedList y modificar el nodo de la cola después de la creación de la lista para hacerla circular / cíclica? Si es así, ¿me puede mostrar un poco de código en la forma en que pasaría?

Si no puedo usar java.util.LinkedList, ¿cómo debo crear mi propia circular / cíclica aplicación lista enlazada? ¿Me puede mostrar los esqueletos de cómo se vería esta implementación?

Avísame si necesita más detalles y voy a aclarar cualquier confusión.

¿Fue útil?

Solución

class ListNode {
    public ListNode next;
    public Object data;

    public ListNode(Object data, ListNode next) {
        this.next = next;
        this.data = data;
    }
}

class CircularLinkedList {
    private ListNode head = null;
    private int numberOfElements = 0;
    private ListNode actualElement = null;
    private int index = 0;

    public boolean isEmpty() {
        return (numberOfElements == 0);
    }

    public int getNumberOfElements() {
        return numberOfElements;
    }

    public void insertFirst(Object data) {
        if (!(isEmpty())) {
            index++;
        }
        ListNode listNode = new ListNode(data, head);
        head = listNode;
        numberOfElements++;
    }

    public void insertAfterActual(Object data) {
        ListNode listNode = new ListNode(data, actualElement.next);
        actualElement.next = listNode;
        numberOfElements++;
    }

    public boolean deleteFirst() {
        if (isEmpty())
            return false;
        if (index > 0)
            index--;
        head = head.next;
        numberOfElements--;
        return true;
    }

    public boolean deleteActualElement() {
        if (index > 0) {
            numberOfElements--;
            index--;
            ListNode listNode = head;
            while (listNode.next.equals(actualElement) == false)
                listNode = listNode.next;
            listNode.next = actualElement.next;
            actualElement = listNode;
            return true;
        }
        else {
            actualElement = head.next;
            index = 0;
            return deleteFirst();
        }
    }

    public boolean goToNextElement() {
        if (isEmpty())
            return false;
        index = (index + 1) % numberOfElements;
        if (index == 0)
            actualElement = head;
        else
            actualElement = actualElement.next;
        return true;
    }

    public Object getActualElementData() {
        return actualElement.data;
    }

    public void setActualElementData(Object data) {
        actualElement.data = data;
    }
}

Otros consejos

Para la aplicación práctica (por ejemplo, no sólo jugar o aprender) yo preferiría personalmente método Iterables.cycle Guava - ver http://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common/collect/Iterables. html # ciclo% 28java.lang.Iterable% 29 .

java.util.LinkedList es uno de los tipos de datos Colecciones. El propósito de las colecciones es proporcionar estructuras de servicios públicos, sin molestarse el programador que preocuparse acerca de su implementación interna. Si debe tiene partes internas que funcionan de una manera determinada, y la java.util cuáles no es garantía de que la forma en que funcionan, entonces no son para ti.

Para implementar una lista enlazada circular, en primer lugar crear una clase NodoLista:

class ListNode {
    ListNode next;
    ListNode prev;
    Object data;
}

A continuación, almacenar un ListNode head, y asegúrese de que prev de puntos head a la "final" de la lista, y next de los puntos de "extremos" de nuevo a head. Honestamente, sin embargo, hay poca diferencia entre una lista vinculada de forma bidireccional mantener un puntero de cola y una lista enlazada circular.

Consulte aquí para una aplicación amplia de lista enlazada en Java. Por lo que es circular, es sólo un pellizco en dicho código.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top