using System.Collections;
using System.Collections.Generic;
public T Value { get; set; }
public Node<T> Next { get; set; }
public class UList<T> : IEnumerable<T>
public Node<T> AddLast(T value)
var node = new Node<T>(value);
public void Add(int index, T value)
var node = new Node<T>(value);
node.Next = GetNode(index);
var start = GetNode(index - 1);
public void RemoveNode(int index)
var tmp = GetNode(index - 1);
tmp.Next = GetNode(index + 1);
public Node<T> GetNode(int index)
throw new IndexOutOfRangeException();
for (var cnt = 0; cnt < index; cnt++)
public T GetValue(int index)
return GetNode(index).Value;
IEnumerator IEnumerable.GetEnumerator()
public IEnumerator<T> GetEnumerator()
public static void Main(string[] args)
var list = new UList<int>();
for (int i = 0; i < 10; i++)
Console.WriteLine($"Count after init: {list.Count()}");
Console.WriteLine($"Count after remove: {list.Count()}");
Console.WriteLine($"Value: {list.GetValue(6)}");
Console.WriteLine($"Count after add: {list.Count()}");
foreach (var item in list)
Console.WriteLine($"index: {index}, value: {item}");
.Select((el, i) => new { el = el, index = i })
Console.WriteLine($"{tmp.ElementAt(0)}, {tmp.ElementAt(1)}");