Necesito una lista circular vinculada, por lo que me pregunto si LinkedList
es una lista circular vinculada?¿LinkedList en .NET es una lista circular vinculada?
Respuesta
No. Es una lista doblemente vinculada, pero no una lista circular vinculada. Ver MSDN for details on this.
LinkedList <T> hace una buena base para su propia lista circular vinculada, sin embargo. Pero sí tiene una propiedad definida Primero y Último, y no enumerará alrededor de estos, lo que hará una lista circular apropiada.
No, no lo es.
Primero sí, ahora no .... confundes doblemente con circular. – leppie
¡Sí! Lo siento. Corregido ahora. –
Si necesita una estructura de datos circular, eche un vistazo al C5 generic collections library. Tienen cualquier colección que sea imaginablemente útil allí, incluido un circular queue (que podría ayudarte).
Una solución rápida para usarlo en forma circular, cada vez que desee mover el "siguiente" pieza en la lista:
current = current.Next ?? current.List.First;
donde la corriente es LinkedListNode<T>
.
Esto es astuto. Me gusta. –
Mientras que la API pública de LinkedList no es circular, internamente lo es. Consulta al reference source, se puede ver cómo se implementa:
// This LinkedList is a doubly-Linked circular list.
internal LinkedListNode<T> head;
Por supuesto, para ocultar el hecho de que es circular, propiedades y métodos que atraviesan la lista hacer comprobaciones para evitar envolver de nuevo a la cabeza.
LinkedListNode:
public LinkedListNode<T> Next {
get { return next == null || next == list.head? null: next;}
}
public LinkedListNode<T> Previous {
get { return prev == null || this == list.head? null: prev;}
}
LinkedList.Enumerator:
public bool MoveNext() {
if (version != list.version) {
throw new InvalidOperationException(SR.GetString(SR.InvalidOperation_EnumFailedVersion));
}
if (node == null) {
index = list.Count + 1;
return false;
}
++index;
current = node.item;
node = node.next;
if (node == list.head) {
node = null;
}
return true;
}
Sé que esta pregunta es antigua, pero dado que el código abierto de .NET es bastante reciente, creo que es bueno saber qué está sucediendo bajo el capó. –
- 1. Quitar de una lista vinculada
- 2. Ordene una sola lista vinculada
- 3. ¿Cómo revertir una lista vinculada?
- 4. java - iterar una lista vinculada
- 5. Cambiar dos elementos en una lista vinculada
- 6. Encontrar corrupción en una lista vinculada
- 7. Ordenar una lista vinculada en Java
- 8. Intercambiando nodos en una sola lista vinculada
- 9. Ordenar una lista vinculada en C
- 10. Intercambiar elementos en LinkedList
- 11. Dos formas de implementar una lista vinculada: ¿cuál es mejor?
- 12. ¿Es posible un bloqueo (espera) de una lista doblemente vinculada?
- 13. ¿Cómo puedo ordenar una lista vinculada en sql?
- 14. ¿Es posible revertir una lista vinculada que contiene un ciclo?
- 15. Creación de una clase LinkedList desde cero
- 16. Pythonic Lista circular
- 17. ¿Cómo se copia una lista vinculada a otra lista?
- 18. ¿Cómo funciona LinkedList internamente en Java?
- 19. ¿Cómo puedo inicializar una LinkedList con entradas/valores en ella?
- 20. ¿Puedo usar java.util.LinkedList para construir una lista circular/cíclica enlazada?
- 21. lista vinculada inversa sin temp
- 22. ¿La lista vinculada es una ADT o es una estructura de datos, o ambas?
- 23. Implementar la lista vinculada en php
- 24. Detección de ciclo en una lista vinculada: Teoría exhaustiva
- 25. ¿Es malo un destructor recursivo para la lista vinculada, árbol, etc.?
- 26. Tamaño total de una lista vinculada en C
- 27. Lanzar una lista vinculada de excepciones en Java
- 28. ¿Cómo comparar nodos genéricos en una lista vinculada usando Comparable?
- 29. Declarar una LinkedList en Java
- 30. Implementación estándar de una lista vinculada en C
@ John, FYI leer los documentos, pero si usted sabía nada, que se sabe que esto es una pregunta válida, teniendo en cuenta Las implementaciones de LinkedList varían mucho. –
Bien, retiraré el -1 hasta que especifique a qué se refiere con una lista circular circular y por qué la documentación de MSDN no lo dejó en claro. De esa forma, también le diremos a Microsoft cómo arreglar la documentación. –
Bastante justo. Creo que realmente no confiaba si MS usaba el término correctamente. Sabes que a veces los reclamos por el BCL no son válidos. Menor, pero aún quería estar seguro. –