Example #1
0
        public void InsertSorted(object value)
        {
            if (Head == null)
            {
                Head = new Node {Value = value};
                Head.Next = Head;
            }
            else
            {
                if ((int)value < (int)Head.Value)
                {
                    //when value is smaller than head, make a copy of the head and set head's value to the new value, then change the head
                    var headCopy = new Node {Next = Head.Next, Value = Head.Value};

                    Head.Next = headCopy;
                    Head.Value = value;
                }
                else
                {
                    var currentItem = Head;
                    while (currentItem.Next != Head && (int)currentItem.Next.Value <= (int)value)
                    {
                        currentItem = currentItem.Next;
                    }

                    currentItem.Next = new Node {Next = currentItem.Next, Value = value};
                }
            }
        }
Example #2
0
        public void ConvertToBst()
        {
            Node one = new Node { Value = 1 };
            Node two = new Node { Value = 2 };
            Node three = new Node { Value = 3 };
            Node four = new Node { Value = 4 };
            Node five = new Node { Value = 5 };
            Node six = new Node { Value = 6 };

            one.Next = two;
            two.Next = three;
            three.Next = four;
            four.Next = five;
            five.Next = six;

            LinkedList list = new LinkedList { Head = one };

            TreeNode<int> bst = list.ConvertToBst<int>();

            Assert.AreEqual(3, bst.Value);
            Assert.AreEqual(1, bst.Left.Value);
            Assert.AreEqual(2, bst.Left.Right.Value);
            Assert.AreEqual(5, bst.Right.Value);
            Assert.AreEqual(4, bst.Right.Left.Value);
            Assert.AreEqual(6, bst.Right.Right.Value);
        }
        public void FalseLinkedListOneItem()
        {
            var list = new CircularLinkedList();

            var head = new Node { Value = 1 };

            list.Head = head;

            Assert.IsFalse(list.Detect());
        }
        public void FalseLinkedListMultipleItems()
        {
            var list = new CircularLinkedList();

            var second = new Node { Value = 2 };
            var head = new Node { Value = 1, Next = second };

            list.Head = head;

            Assert.IsFalse(list.Detect());
        }
Example #5
0
        public void RemoveMultiple()
        {
            var tail = new Node { Value = 3 };
            var elementOne = new Node { Value = 1, Next = tail };
            var elementTwo = new Node { Value = 1, Next = elementOne };
            var head = new Node { Value = 2, Next = elementTwo };
            var list = new LinkedList { Head = head };

            list.Remove(1);

            Assert.IsNotNull(list.Head);
            Assert.AreSame(head, list.Head);
            Assert.AreSame(tail, head.Next);
        }
Example #6
0
        public void InsertAtEnd(object value)
        {
            if (Head == null)
            {
                //handle null head
                Head = new Node { Value = value };
                Head.Next = Head;
            }
            else
            {
                var headCopy = new Node
                                   {
                                       Next = Head.Next,
                                       Value = Head.Value
                                   };

                Head.Next = headCopy;
                Head.Value = value;

                //don't forget to reset the head back to the copy
                Head = headCopy;
            }
        }
Example #7
0
        public void WhenIsTailElement()
        {
            var tail = new Node { Value = 1 };
            var list = new LinkedList { Head = new Node { Value = 2, Next = tail } };

            list.Remove(1);

            Assert.IsNotNull(list.Head);
            Assert.IsNull(list.Head.Next);
        }
Example #8
0
        public void WhenIsHeadElementAndNext()
        {
            var other = new Node { Value = 2 };
            var next = new Node { Value = 1, Next = other };
            var list = new LinkedList { Head = new Node { Value = 1, Next = next } };

            list.Remove(1);

            Assert.IsNotNull(list.Head);
            Assert.AreSame(other, list.Head);
        }
Example #9
0
        public void ReverseTwoItems()
        {
            var second = new Node();
            var head = new Node { Next = second };
            var list = new LinkedList { Head = head };

            list.Reverse();

            Assert.IsNotNull(list.Head);
            Assert.AreSame(second, list.Head);
            Assert.AreSame(head, second.Next);
        }
        public void TrueLoopAtTheEnd()
        {
            var list = new CircularLinkedList();

            var third = new Node {Value = 3};
            var second = new Node { Value = 2, Next = third };
            var head = new Node { Value = 1, Next = second };
            third.Next = second;

            list.Head = head;

            Assert.IsTrue(list.Detect());
        }