using System.Collections.Generic;
public Int32 Value { get; set; }
public Bag? Next { get; set; }
public IEnumerable<Int32> Traverse()
if (this.Next == null) yield break;
foreach (var value in this.Next.Traverse()) yield return value;
public IEnumerable<Int32> TraverseReverese()
return this.Traverse().Reverse();
public static void Main()
var bag = new Bag { Value = 1, Next = new Bag { Value = 2, Next = new Bag { Value = 3 } } };
foreach (var value in bag.TraverseReverese()) Console.WriteLine(value);