using System; public interface ListCollection { void Add(object o); void Clear(); bool Remove(object o); int Size(); bool Contains(object o); bool IsEmpty(); } public abstract class LinkedList: ListCollection { public Node first = null; public int size; public abstract void Add(object o); public void Clear() { first = null; size = 0; } public bool Remove(object o) { Node current = first; while (current != null) { if (current.data == o) { if (current.next != null) current.next.prev = current.prev; if (current.prev != null) current.prev.next = current.next; size--; return true; } current = current.next; } return false; } public int Size() { return size; } public bool Contains(object o) { Node current = first; while (current != null) { if (current.data == o) return true; current = current.next; } return false; } public bool IsEmpty() { if (first == null) return false; return true; } public class Node { public Node next, prev; public object data; public Node(Node p, Node n, object d) { prev = p; next = n; data = d; } } } public class UnorderedList: LinkedList { public override void Add(object o) { first = new Node(null, first, o); size++; } } public class Test { UnorderedList l = new UnorderedList(); public static void Main(string[] args) { string t1 = "test", t2 = "test!"; l.Add(t1); l.Add(t2); Console.WriteLine("List is {0} items contained.", l.Size()); } }