public SortedListNode(
     TNode value,
     SortedListNode <TNode> prev = null,
     SortedListNode <TNode> next = null)
 {
     this.data = value;
     this.prev = prev;
     this.next = next;
 }
            public IEnumerator <T> GetEnumerator()
            {
                SortedListNode <T> temp = tail;

                while (temp != null)
                {
                    yield return(temp.data);

                    temp = temp.prev;
                }
            }
        public IEnumerator <T> GetEnumerator()
        {
            SortedListNode <T> temp = head;

            while (temp != null)
            {
                yield return(temp.data);

                temp = temp.next;
            }
        }
        public bool Find(T value, out T found)
        {
            SortedListNode <T> node = FindNode(value);

            if (node != null)
            {
                found = node.data;
                return(true);
            }

            found = default(T);
            return(false);
        }
        private SortedListNode <T> FindNode(T value)
        {
            SortedListNode <T> current = head;

            while (current != null)
            {
                if (current.data.Equals(value))
                {
                    return(current);
                }

                current = current.next;
            }

            return(null);
        }
        public void Add(T value)
        {
            if (head == null)
            {
                // empty list
                head = new SortedListNode <T>(value);
                tail = head;
            }
            else if (head.data.CompareTo(value) >= 0)
            {
                // adding at head
                SortedListNode <T> newHead = new SortedListNode <T>(value);
                newHead.next = head;
                head.prev    = newHead;
                head         = newHead;
            }
            else if (tail.data.CompareTo(value) < 0)
            {
                // adding at tail
                SortedListNode <T> newtail = new SortedListNode <T>(value);
                newtail.prev = tail;
                tail.next    = newtail;
                tail         = newtail;
            }
            else
            {
                // find the insertion point
                SortedListNode <T> insertBefore = head;
                while (insertBefore.data.CompareTo(value) < 0)
                {
                    insertBefore = insertBefore.next;
                }

                // insert the node
                SortedListNode <T> toInsert = new SortedListNode <T>(value);
                toInsert.next          = insertBefore;
                toInsert.prev          = insertBefore.prev;
                insertBefore.prev.next = toInsert;
                insertBefore.prev      = toInsert;
            }

            Count++;
        }
        public bool Remove(T value)
        {
            SortedListNode <T> toRemove = FindNode(value);

            if (toRemove == null)
            {
                return(false);
            }

            SortedListNode <T> prev = toRemove.prev;
            SortedListNode <T> next = toRemove.next;

            if (prev == null && next == null)
            {
                head = null;
                tail = null;
            }
            else if (prev != null && next != null)
            {
                prev.next = next;
                next.prev = prev;
            }
            else if (prev != null && next == null)
            {
                prev.next = null;
                tail      = prev;
            }
            else
            {
                next.prev = null;
                head      = next;
            }

            Count--;
            return(true);
        }
예제 #8
0
 public void Add(T value)
 {
     if (head == null)
     {
         head = new SortedListNode <T>(value);
         tail = head;
     }
     else if (head.data.CompareTo(value) >= 0)
     {
         var newHead = new SortedListNode <T>(value);
         newHead.next = head;
         head.prev    = newHead;
         head         = newHead;
     }
     else if (tail.data.CompareTo(value) < 0)
     {
         var newTail = new SortedListNode <T>(value);
         newTail.prev = tail;
         tail.next    = newTail;
         tail         = newTail;
     }
     else
     {
         var insertBefore = head;
         while (insertBefore.data.CompareTo(value) < 0)
         {
             insertBefore = insertBefore.next;
         }
         var insertNode = new SortedListNode <T>(value);
         insertNode.prev      = insertBefore.prev;
         insertNode.next      = insertBefore;
         insertBefore.prev    = insertNode;
         insertNode.prev.next = insertNode;
     }
     Count++;
 }
 public ReverseEnumerator(SortedListNode <T> tail)
 {
     this.tail = tail;
 }