Exemple #1
0
        public void InsertAt(DoubleNode <T> node, T value)
        {
            var newNode = new DoubleNode <T>(value);

            newNode.Previous = node;
            newNode.Next     = node.Next;
            if (node.Next != null)
            {
                node.Next.Previous = newNode;
            }
            node.Next = newNode;
        }
Exemple #2
0
        public void Append(T value)
        {
            var newNode = new DoubleNode <T>(value);

            if (Head is null)
            {
                Head = newNode;
            }
            else
            {
                var last = Traverse((l, n) => false);
                last.Next        = newNode;
                newNode.Previous = last;
            }
        }
Exemple #3
0
        public DoubleNode <T> Traverse(Func <DoubleNode <T>, DoubleNode <T>, bool> findFn)
        {
            var            current  = Head;
            DoubleNode <T> previous = null;

            while (current != null)
            {
                var result = findFn(previous, current);
                previous = current;
                current  = current.Next;
                if (result)
                {
                    break;
                }
            }
            return(previous);
        }
Exemple #4
0
 public void Remove(DoubleNode <T> node)
 {
     if (Head.Value.Equals(node.Value))
     {
         Head = Head.Next;
     }
     else
     {
         if (node.Previous != null)
         {
             node.Previous.Next = node.Next;
         }
         if (node.Next != null)
         {
             node.Next.Previous = node.Previous;
         }
     }
 }