Exemple #1
0
        MyLinkedList PrepareList()
        {
            var list = new MyLinkedList();

            list.AddNode("3");
            list.AddNode("4");
            list.AddNode("5");
            return(list);
        }
        public void GetIntersection()
        {
            var intersectNode1 = new MyLinkedListNode <int>(4);
            var intersectNode2 = new MyLinkedListNode <int>(7);

            var list1 = new MyLinkedList <int>(new int[] { 7, 1, 6 });

            list1.AddNode(intersectNode1);
            list1.AddNode(intersectNode2);

            var list2 = new MyLinkedList <int>(new int[] { 8, 5, 5, 9, 2 });

            list2.AddNode(intersectNode1);
            list2.AddNode(intersectNode2);

            // Space Complexity: O(1);
            // Time Complexity: O(3M + N) ~= O(N);

            (int count, MyLinkedListNode <int> last) GetLastNodeAndCount(MyLinkedList <int> list) =>
            (list.Count, list.Tail);

            var nodeCount_1 = GetLastNodeAndCount(list1);
            var nodeCount_2 = GetLastNodeAndCount(list2);

            if (nodeCount_1.last != nodeCount_2.last)
            {
                Assert.True(false);
            }

            var lists = nodeCount_1.count > nodeCount_2.count
                ? (major : list1, minor : list2)
                        : (major : list2, minor : list1);

            var aux          = lists.major.Count;
            var currentMajor = lists.major.Head;
            var currentMinor = lists.minor.Head;

            while (currentMajor != null && currentMinor != null)
            {
                if (currentMajor == currentMinor)
                {
                    Assert.Equal(currentMinor, intersectNode1);
                    break;
                }

                aux--;
                currentMajor = currentMajor.Next;
                if (aux < lists.minor.Count)
                {
                    currentMinor = currentMinor.Next;
                }
            }

            Assert.True(false);
        }
Exemple #3
0
        public void tKthToLast()
        {
            MyLinkedList<int> list = new MyLinkedList<int>();

            list.AddNode(1);
            list.AddNode(2);
            list.AddNode(3);
            list.AddNode(4);

            Assert.IsTrue(2 == ReturnKthToLast.KthToLast(2, list));
            Assert.IsTrue(4 == ReturnKthToLast.KthToLast(0, list));
            Assert.IsTrue(1 == ReturnKthToLast.KthToLast(3, list));
        }
Exemple #4
0
        public void AddNode_add2Node_outCount2()
        {
            //arrange
            int expected = 2;
            //actual
            MyLinkedList myList = new MyLinkedList();

            myList.AddNode(1);
            myList.AddNode(1);
            int actual = myList.GetCount();

            //assert
            Assert.AreEqual <int>(expected, actual);
        }
Exemple #5
0
        public void AddNode_NegativeAdd2Node_outCount0()
        {
            //arrange
            int expected = 0;//Предпологаем что отработает не корректно.
            //actual
            MyLinkedList myList = new MyLinkedList();

            myList.AddNode(1);
            myList.AddNode(1);
            int actual = myList.GetCount();

            //assert
            Assert.AreEqual <int>(expected, actual);
        }
Exemple #6
0
        static void Main(string[] args)
        {
            var list = new MyLinkedList();

            list.AddNode("3");
            list.AddNode("4");
            list.AddNode("5");
            var worker = new LinkedListWorker();

            worker.PrintLinkedList(list);
            worker.ReverseList(list);
            worker.PrintLinkedList(list);
            Console.ReadLine();
        }
Exemple #7
0
        public void RemoveNode_removeHead_outCount1()
        {
            //arrange
            int expected = 1;
            //actual
            MyLinkedList myList = new MyLinkedList();

            myList.AddNode(1);
            myList.AddNode(2);
            myList.RemoveNode(1);
            int actual = myList.GetCount();

            //assert
            Assert.AreEqual <int>(expected, actual);
        }
Exemple #8
0
        public void FindNode_FindValue2_outValue2()
        {
            //arrange
            int expected = 2;
            //actual
            MyLinkedList myList = new MyLinkedList();

            myList.AddNode(1);
            myList.AddNode(2);
            Node fNode  = myList.FindNode(2);
            int  actual = fNode.Value;

            //assert
            Assert.AreEqual <int>(expected, actual);
        }
Exemple #9
0
        public void GetCount_add3Node_out3()
        {
            //arrange
            int expected = 3;
            //actual
            MyLinkedList myList = new MyLinkedList();

            myList.AddNode(1);
            myList.AddNode(2);
            myList.AddNode(3);
            int actual = myList.GetCount();

            //assert
            Assert.AreEqual <int>(expected, actual);
        }
Exemple #10
0
        public void tPalindrome()
        {
            MyLinkedList<char> list = new MyLinkedList<char>();
            MyLinkedList<char> list2 = new MyLinkedList<char>();
            MyLinkedList<char> list3 = new MyLinkedList<char>();

            foreach (char c in "neuquen")
            {
                list.AddNode(c);
            }

            foreach (char c in "palindrome")
            {
                list2.AddNode(c);
            }

            foreach (char c in "BoquitaatiuqoB")
            {
                list3.AddNode(c);
            }

            Assert.IsTrue(Palindrome.IsPalindrome(list));
            Assert.IsFalse(Palindrome.IsPalindrome(list2));
            Assert.IsTrue(Palindrome.IsPalindrome(list3));
        }
        public void HasLoop()
        {
            // Arrange...
            var list       = new MyLinkedList <int>(new int[] { 8, 5, 5, 9, 2, 7, 1 });
            var circleNode = list[3];

            list.AddNode(circleNode);

            // Space Complexity O(N)
            // Time Complexity O(N)

            var hashTable = new HashSet <int>();
            var current   = list.Head;

            while (current != null)
            {
                var nodeId = current.GetHashCode();
                if (hashTable.Contains(nodeId))
                {
                    Assert.True(true);
                    break;
                }

                hashTable.Add(nodeId);
                current = current.Next;
            }

            Assert.True(false);
        }
Exemple #12
0
        public void ReverseListRecursive_simple()
        {
            //arrange
            var list = new MyLinkedList();

            list.AddNode("3");
            list.AddNode("4");
            var worker = new LinkedListWorker();

            //act
            worker.ReverseListRecursive(list);
            var res = worker.GetString(list);

            //assert
            Assert.AreEqual("3-4", res);
        }
        public void Partition()
        {
            var partition = 5;
            var list      = new MyLinkedList <int>(new int[] { 3, 5, 8, 5, 10, 2, 1 });

            // Time Complexity: O(N)
            // Space Complexity: O(1)

            var currentNode = list.Head;

            list.Clear();
            var biggerList = new MyLinkedList <int>();

            while (currentNode != null)
            {
                if (currentNode.Value >= partition)
                {
                    biggerList.AddNode(currentNode.Value);
                }
                else
                {
                    list.AddNode(currentNode.Value);
                }

                currentNode = currentNode.Next;
            }

            list.Tail.Next = biggerList.Head;
        }
Exemple #14
0
        public void AddNodeAfter_addAfterNode1_outCount3()
        {
            //arrange
            int expected = 3;
            //actual
            MyLinkedList myList = new MyLinkedList();

            myList.AddNode(1);
            myList.AddNode(2);
            Node fNode = myList.FindNode(1);

            myList.AddNodeAfter(fNode, 11);
            int actual = myList.GetCount();

            //assert
            Assert.AreEqual <int>(expected, actual);
        }
Exemple #15
0
        public void GetCount_add3NodeandRemove1_out2()
        {
            //arrange
            int expected = 2;
            //actual
            MyLinkedList myList = new MyLinkedList();

            myList.AddNode(1);
            myList.AddNode(2);
            myList.AddNode(3);
            Node fNode = myList.FindNode(1);

            myList.RemoveNode(fNode);
            int actual = myList.GetCount();

            //assert
            Assert.AreEqual <int>(expected, actual);
        }
Exemple #16
0
        public void AddNodeAfter_addAfterNode1_outNextValue2()
        {
            //arrange
            int expected = 2;
            //actual
            MyLinkedList myList = new MyLinkedList();

            myList.AddNode(1);
            myList.AddNode(2);
            Node fNode = myList.FindNode(1);

            myList.AddNodeAfter(fNode, 11);
            fNode = myList.FindNode(11);
            int actual = fNode.NextNode.Value;

            //assert
            Assert.AreEqual <int>(expected, actual);
        }
Exemple #17
0
        public void tIntersection()
        {
            MyLinkedList<int> list1 = new MyLinkedList<int>();
            MyLinkedList<int> list2 = new MyLinkedList<int>();
            Node node = new Node(10);

            list1.AddNode(1);
            list1.AddNode(4);
            list1.AddNode(7);
            list1.AddNode(node);

            list2.AddNode(3);
            list2.AddNode(0);
            list2.AddNode(node);
            list2.AddNode(6);

            Assert.IsTrue(Intersection.Intersect(list1,list2));

        }
Exemple #18
0
        public void tSumLists()
        {
            MyLinkedList<char> list1 = new MyLinkedList<char>();
            MyLinkedList<char> list2 = new MyLinkedList<char>();
            MyLinkedList<char> success = new MyLinkedList<char>();

            list1.AddNode('7');
            list1.AddNode('1');
            list1.AddNode('6');

            list2.AddNode('5');
            list2.AddNode('9');
            list2.AddNode('2');

            success.AddNode('2');
            success.AddNode('1');
            success.AddNode('9');

            Assert.IsTrue(SumLists.Sum(list1, list2).CompareList(success));
        }
Exemple #19
0
        public void RemoveNode_removeOutIndex_outEception()
        {
            //arrange

            //actual
            MyLinkedList myList = new MyLinkedList();

            myList.AddNode(1);
            myList.RemoveNode(2);
            //assert
        }
Exemple #20
0
        public void GetCount_add3NodeRemove1NodeAdd2Node_out4()
        {
            //arrange
            int expected = 4;
            //actual
            MyLinkedList myList = new MyLinkedList();

            myList.AddNode(1);
            myList.AddNode(2);
            myList.AddNode(3);
            Node fNode = myList.FindNode(3);

            myList.RemoveNode(fNode);
            fNode = myList.FindNode(2);
            myList.AddNodeAfter(fNode, 21);
            myList.AddNodeAfter(fNode, 22);
            int actual = myList.GetCount();

            //assert
            Assert.AreEqual <int>(expected, actual);
        }
Exemple #21
0
        public void tLoopDetection()
        {
            MyLinkedList<char> list = new MyLinkedList<char>();
            MyLinkedList<char>.Node node;

            MyLinkedList<char>.Node repeatedNode = new MyLinkedList<char>.Node('C');

            node = new MyLinkedList<char>.Node('A');
            list.AddNode(node);
            node = new MyLinkedList<char>.Node('B');
            list.AddNode(node);

            list.AddNode(repeatedNode);

            node = new MyLinkedList<char>.Node('D');
            list.AddNode(node);
            node = new MyLinkedList<char>.Node('E');
            list.AddNode(node);

            list.AddNode(repeatedNode);
            Assert.IsTrue(ReferenceEquals(repeatedNode, LoopDetection.Detect(list)));

            list.RemoveNode(6);
            Assert.IsTrue(ReferenceEquals(null, LoopDetection.Detect(list)));
        }
Exemple #22
0
        public void FindNode_FindValue0_outNull()
        {
            //arrange
            Node expected = null;
            //actual
            MyLinkedList myList = new MyLinkedList();

            myList.AddNode(1);
            Node actual = myList.FindNode(0);

            //assert
            Assert.AreEqual <Node>(expected, actual, "Обьект не null");
        }
Exemple #23
0
        public void AddNodeAfter_addNullNode_outEception()
        {
            //arrange

            //actual
            MyLinkedList myList = new MyLinkedList();

            myList.AddNode(1);
            Node fNode = null;

            myList.AddNodeAfter(fNode, 11);
            //assert
        }
Exemple #24
0
        public void tRemoveDups()
        {
            MyLinkedList<int> list = new MyLinkedList<int>();
            list.AddNode(1);
            list.AddNode(4);
            list.AddNode(5);
            list.AddNode(16);
            list.AddNode(16);
            list.AddNode(4);
            list.AddNode(5);

            MyLinkedList<int> list2 = new MyLinkedList<int>();
            list2.AddNode(1);
            list2.AddNode(1);
            list2.AddNode(1);

            RemoveDups.RemoveDuplicates(list);
            RemoveDups.RemoveDuplicates(list2);

            Assert.IsTrue(list.Size == 4);
            Assert.IsTrue(list2.Size == 1);
        }
Exemple #25
0
        public void GetString_1()
        {
            //arrange
            var list = new MyLinkedList();

            list.AddNode("3");


            var worker = new LinkedListWorker();
            //act
            var st = worker.GetString(list);

            //assert
            Assert.AreEqual("3", st);
        }
Exemple #26
0
        public void RemoveNodeByNode_notFoundNode_outEception()
        {
            //arrange

            //actual
            MyLinkedList myList = new MyLinkedList();

            myList.AddNode(1);
            Node fNode = new Node()
            {
                Value = 2
            };

            myList.RemoveNode(fNode);
            //assert
        }
        public void HasLoop_Book()
        {
            // Arrange...
            var list       = new MyLinkedList <int>(new int[] { 8, 5, 5, 9, 2, 7, 1 });
            var circleNode = list[3];

            list.AddNode(circleNode);

            // Space Complexity O(N)
            // Time Complexity O(1)

            var slow = list.Head;
            var fast = list.Head;

            // Find a loop
            while (fast.Next != null)
            {
                slow = slow.Next;
                fast = fast.Next.Next;

                if (fast == slow)
                {
                    break;
                }
            }

            if (fast.Next == null)
            {
                Assert.True(false);
            }

            slow = list.Head;
            while (slow != fast)
            {
                slow = slow.Next;
                fast = fast.Next;
            }
        }
Exemple #28
0
        public void tPartition()
        {
            MyLinkedList<int> list = new MyLinkedList<int>();
            list.AddNode(3);
            list.AddNode(5);
            list.AddNode(8);
            list.AddNode(5);
            list.AddNode(10);
            list.AddNode(2);
            list.AddNode(1);

            MyLinkedList<int> success = new MyLinkedList<int>();
            success.AddNode(3);
            success.AddNode(2);
            success.AddNode(1);

            success.AddNode(5);
            success.AddNode(8);
            success.AddNode(5);
            success.AddNode(10);

            Assert.IsTrue(Partition.MakePartition(list, 5).CompareList(success));

        }