public void AddBefore(CircularLinkedListNode <T> nodeAhead, T value)
        {
            if (nodeAhead == Head)
            {
                AddNodeToFront(value);
                return;
            }

            CircularLinkedListNode <T> runner  = Head;
            CircularLinkedListNode <T> current = new CircularLinkedListNode <T>(value);


            for (int i = 0; i < Count; i++)
            {
                if (runner.next == null)
                {
                    return;
                }
                if (runner.next == nodeAhead)
                {
                    runner.next  = current;
                    current.next = nodeAhead;
                }
                runner = runner.next;
            }
            if (nodeAhead.next == null)
            {
                Tail.next = null;
                Tail      = nodeAhead;
                Tail.next = Head;
            }
            Count++;
        }
        public void AddAfter(CircularLinkedListNode <T> nodeBehind, T value)
        {
            CircularLinkedListNode <T> current = new CircularLinkedListNode <T>(value);

            if (nodeBehind == null)
            {
                return;
            }
            else
            {
                if (nodeBehind == Tail)
                {
                    AddNodeToLast(value);
                    return;
                }
                current.next    = nodeBehind.next;
                nodeBehind.next = current;
                current.prev    = nodeBehind;
                if (current.next == null)
                {
                    Tail      = current;
                    Tail.next = null;
                    Tail.next = Head;
                }
            }
            Count++;
        }
        public void PrintList()
        {
            int i = 0;

            Console.WriteLine("-------------------------");
            CircularLinkedListNode <T> runner = Head;

            while (i < Count)
            {
                Console.WriteLine(runner.data);
                runner = runner.next;
                i++;
            }
            Console.WriteLine("-------------------------");
        }
 public void AddNodeToLast(T value)
 {
     if (Head == null)
     {
         AddNodeToFront(value);
     }
     else
     {
         CircularLinkedListNode <T> current = new CircularLinkedListNode <T>(value);
         Tail.next    = null;
         Tail.next    = current;
         current.prev = Tail;
         Tail         = current;
         Tail.next    = Head;
         Head.prev    = Tail;
         Count++;
     }
 }
 public bool RemoveLast()
 {
     if (Head == null)
     {
         return(false);
     }
     else
     {
         if (Head == Tail)
         {
             Clear();
             return(true);
         }
         else
         {
             Tail.next = null;
             Tail      = Tail.prev;
             Tail.next = null;
             Tail.next = Head;
         }
         Count--;
         return(true);
     }
 }
Пример #6
0
 public CircularLinkedListNode(T current)
 {
     data = current;
     next = null;
     prev = null;
 }
 public void Clear()
 {
     Head  = null;
     Tail  = null;
     Count = 0;
 }