Пример #1
0
            public void Add(int index, T data)
            {
                if (index > Length)
                {
                    throw new ArgumentOutOfRangeException(nameof(index));
                }
                if (index < 0)
                {
                    throw new ArgumentOutOfRangeException(nameof(index));
                }

                EvenOddSLLNode <T> newNode = new EvenOddSLLNode <T>(data);

                if (index == 0)
                {
                    newNode.Next          = _evenNode;
                    newNode.NextOddOrEven = _oddNode;

                    _oddNode  = _evenNode;
                    _evenNode = newNode;
                    Length++;
                    return;
                }

                EvenOddSLLNode <T> node = index % 2 == 0 ? _evenNode : _oddNode;

                for (int i = 0; i + 2 < index; i += 2)
                {
                    node = node?.NextOddOrEven;
                }

                newNode.Next          = node?.NextOddOrEven;
                newNode.NextOddOrEven = node?.Next?.NextOddOrEven;

                if (node != null)
                {
                    if (node.Next != null)
                    {
                        node.Next.Next          = newNode;
                        node.Next.NextOddOrEven = newNode?.Next;
                    }

                    node.NextOddOrEven = newNode;
                }

                Length++;
            }
Пример #2
0
            public T Get(int index)
            {
                if (index > Length)
                {
                    throw new ArgumentOutOfRangeException(nameof(index));
                }
                if (index < 0)
                {
                    throw new ArgumentOutOfRangeException(nameof(index));
                }

                EvenOddSLLNode <T> node = index % 2 == 0 ? _evenNode : _oddNode;

                for (int i = 0; i + 1 < index; i += 2)
                {
                    node = node.NextOddOrEven;
                }
                return(node.Data);
            }
Пример #3
0
        public void PrintOddPositions()
        {
            if (_oddNode == null)
            {
                Console.WriteLine("List is empty");
            }
            EvenOddSLLNode <T> node = _oddNode;

            while (node != null)
            {
                Console.Write($"{node.Data}");
                if (node.NextOddOrEven != null)
                {
                    Console.Write(" -> ");
                }
                node = node.NextOddOrEven;
            }
            Console.WriteLine();
        }
Пример #4
0
        public override void Print()
        {
            if (_evenNode == null)
            {
                Console.WriteLine("List is empty");
            }
            EvenOddSLLNode <T> node = _evenNode;

            while (node != null)
            {
                Console.Write($"{node.Data}");
                if (node.Next != null)
                {
                    Console.Write(" -> ");
                }
                node = node.Next;
            }
            Console.WriteLine();
        }
Пример #5
0
            public void Remove(int index)
            {
                if (index > Length)
                {
                    throw new ArgumentOutOfRangeException(nameof(index));
                }
                if (index < 0)
                {
                    throw new ArgumentOutOfRangeException(nameof(index));
                }

                if (index < 2)      //special case since there is no node 2 nodes before this
                {
                    if (index == 0) //remove evenNode
                    {
                        _evenNode = _evenNode?.Next;
                    }
                    else //remove oddNode
                    {
                        _evenNode.Next          = _oddNode.Next;
                        _evenNode.NextOddOrEven = _oddNode.NextOddOrEven;
                    }
                    _oddNode = _oddNode.Next;
                    Length--;
                    return;
                }

                //Get 2 nodes before the one to remove
                EvenOddSLLNode <T> node = index % 2 == 0 ? _evenNode : _oddNode;

                for (int i = 0; i + 3 < index; i += 2)
                {
                    node = node?.NextOddOrEven;
                }

                EvenOddSLLNode <T> nodeToRemove = node?.NextOddOrEven;

                node.Next.Next          = nodeToRemove?.Next;
                node.Next.NextOddOrEven = nodeToRemove?.NextOddOrEven;
                node.NextOddOrEven      = nodeToRemove.Next;
                Length--;
            }
Пример #6
0
            public string ToStringOdd()
            {
                StringBuilder sb = new StringBuilder();

                if (_oddNode == null)
                {
                    sb.AppendLine("List is empty");
                    return(sb.ToString());
                }
                EvenOddSLLNode <T> node = _oddNode;

                while (node != null)
                {
                    sb.Append($"{node.Data}");
                    if (node.Next != null)
                    {
                        sb.Append(" -> ");
                    }
                    node = node.NextOddOrEven;
                }
                sb.AppendLine();
                return(sb.ToString());
            }