namespace ln.collections { /** * A backend Implementation of Double-Linked-List **/ public class LinkedList { public LinkedListItem FirstItem => (head.Next != head) ? head.Next : null; public LinkedListItem LastItem => (head.Previous != head) ? head.Previous : null; public LinkedListItem Head => head; LinkedListItem head = new LinkedListItem(); public LinkedList() { } public void Clear() { head = new LinkedListItem(); } public void Add(LinkedListItem item) { if (item.Previous != item) Remove(item); item.Next = head; item.Previous = head.Previous; item.Previous.Next = item; item.Next.Previous = item; } public void Remove(LinkedListItem item) { item.Previous.Next = item.Next; item.Next.Previous = item.Previous; item.Next = item; item.Previous = item; } } }