2011-11-19 46 views

Trả lời

16

Là một 1-off, một cái gì đó như:

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

Nếu bạn đang làm việc đó thường xuyên, có thể là một khối iterator tương tự để mang lại tất cả các giá trị:

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

sau đó:

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

Tôi nghĩ cần lưu ý rằng 'LinkedList 'là 'IEnumerable ', vì vậy nó chọn lên' IEnumerable .Reverse() 'nếu bạn đang sử dụng LINQ. Điều đó có thể đủ cho các danh sách ngắn thực sự. Đối với các danh sách dài hơn, cách tiếp cận trong câu trả lời này sẽ hiệu quả hơn. –

+0

@MatthewStrawbridge Cái nào được ưu tiên nếu cả hai đều có sẵn thông qua 'sử dụng'? Cái cụ thể hơn? –

+0

@ EugenDück Có, cái cụ thể hơn (ví dụ: đối với 'LinkedList ') sẽ được ưu tiên. Nhưng * nếu * hiệu suất của phiên bản 'IEnumerable ' bạn nhận được miễn phí là đủ thì bạn không cần triển khai phiên bản khác. –

Các vấn đề liên quan