2011-11-19 17 views

Respuesta

16

Como 1-off, algo así como:

var el = list.Last; 
while (el != null) { 
    // use el.Value 
    el = el.Previous; 
} 

Si usted lo está haciendo con regularidad, tal vez un bloque de iterador similar a producir todos los valores:

public static IEnumerable<T> Reverse<T>(this LinkedList<T> list) { 
    var el = list.Last; 
    while (el != null) { 
     yield return el.Value; 
     el = el.Previous; 
    } 
} 

a continuación:

foreach(var val in list.Reverse()) { 
    // use val 
} 
+1

Creo que vale la pena señalar que 'LinkedList 'es' IEnumerable ', por lo que recoge' IEnumerable .Reverse() 'si está utilizando Linq. Eso podría ser suficiente para listas realmente cortas. Para listas más largas, el enfoque en esta respuesta será más eficiente. –

+0

@MatthewStrawbridge ¿Cuál tiene prioridad si ambos están disponibles a través de 'usar'? ¿El más específico? –

+0

@ EugenDück Sí, el más específico (es decir, 'LinkedList ') tendrá prioridad. Pero * si * el rendimiento de la versión 'IEnumerable ' que obtiene de forma gratuita es suficiente, entonces no necesita implementar el otro en absoluto. –

Cuestiones relacionadas