2011-11-19 11 views

risposta

16

come un 1-off, qualcosa di simile:

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

Se si sta facendo regolarmente, forse un blocco iteratore simile a cedere tutti i valori:

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

poi:

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

Penso che valga la pena notare che 'LinkedList 'è' IEnumerable ', quindi preleva' IEnumerable . Reverse() 'se stai usando Linq. Ciò potrebbe essere sufficiente per liste davvero brevi. Per elenchi più lunghi, l'approccio in questa risposta sarà più efficiente. –

+0

@MatthewStrawbridge Quale ha la precedenza se entrambi sono disponibili tramite 'utilizzo'? Il più specifico? –

+0

@ EugenDück Sì, il più specifico (ad esempio 'LinkedList ') avrà la precedenza. Ma * se * le prestazioni della versione 'IEnumerable ' che si ottengono gratuitamente sono sufficienti allora non è necessario implementare l'altra. –