using System; namespace System.Collections.Generic { public class LinkList { private Node _Head; public Node Head { get { return _Head; } } public void Add( T value ) { if ( _Head == null ) { _Head = new Node( value ); return; } Node current = _Head; while ( current.Next != null ) { current = current.Next; } current.Next = new Node( value ); } public void Remove( T value ) { Node node = Lookup( value ); if ( node != null ) Remove( node ); } public void Remove( Node node ) { if ( _Head == null ) return; Node current = _Head; while ( current != null ) { if ( node.Data.GetHashCode() == current.Data.GetHashCode() ) { Node previous = Previous( node ); Node next = node.Next; if ( next != null ) { if ( previous == null ) _Head = next; else previous.Next = next; } else if ( previous != null ) previous.Next = null; break; } current = current.Next; } } public Node Previous( Node node ) { if ( _Head == null || _Head == node ) return null; Node previous = _Head; Node current = _Head.Next; while ( current != null ) { if ( current == node ) return previous; previous = current; current = current.Next; } return null; } public Node Lookup( T value ) { if ( _Head == null ) return null; Node current = _Head; while ( current != null ) { if ( current.Data.GetHashCode() == value.GetHashCode() ) return current; current = current.Next; } return null; } public bool Contains( T value ) { return true; } } public class Node { private T _Data; private Node _Next; public T Data { get { return _Data; } set { _Data = value; } } public Node Next { get { return _Next; } set { _Next = value; } } public Node( T data ) { _Data = data; } } }