Beispiel #1
0
        public void FindNthToLastTest()
        {
            var list = SingleLinkedList <int> .CreateList(5);

            list.InsertLast(2);
            list.InsertLast(8);
            list.InsertLast(9);
            list.InsertLast(6);
            list.InsertLast(3);
            list.InsertLast(7);
            list.Print();

            var node = LinkedListProblems.GetNthFromLast <int>(list, 3);

            Assert.IsTrue(node != null && node.Data == 6, string.Format("Found = {0}. Expected = 6", node.Data.ToString()));

            node = LinkedListProblems.GetNthFromLast <int>(list, 1);
            Assert.IsTrue(node != null && node == list.Tail, string.Format("Found = {0}. Expected = {1}", node.Data, list.Tail.Data));
            node = LinkedListProblems.GetNthFromLast <int>(list, 7);
            Assert.IsTrue(node != null && node == list.Head, string.Format("Found = {0}. Expected = {1}", node.Data, list.Head.Data));

            node = LinkedListProblems.GetNthFromLast <int>(list, 0);
            Assert.IsTrue(node == null, "0th to last is not a valid position.");

            try
            {
                node = LinkedListProblems.GetNthFromLast <int>(list, 10);
                Assert.IsTrue(false, "Should have thrown argument exception");
            }
            catch (ArgumentException ex)
            {
                Assert.IsTrue(ex.Message.Equals("N too big."), string.Format("N={0} should be out of range.", 10));
            }
        }
Beispiel #2
0
        public void TestDeleteARandomNode()
        {
            var list = new SingleLinkedList <int>();

            list.InsertLast(2);
            list.InsertLast(8);
            list.InsertLast(9);
            INode <int> node = new LLNode <int> {
                Data = 6
            };

            list.InsertLast(node);
            list.InsertLast(3);
            list.InsertLast(7);
            list.Print();

            LinkedListProblems.DeleteARandomNode(list, node);
            list.Print();

            Assert.IsTrue(node.Data == 3, "Delete failed.");

            node = new LLNode <int> {
                Data = 16
            };
            list.InsertLast(node);
            try
            {
                LinkedListProblems.DeleteARandomNode(list, node);
            }
            catch (ApplicationException ex)
            {
                Assert.IsTrue(ex.Message.Equals("cannot delete the node as its null or the last node."));
            }
        }
Beispiel #3
0
        public void ReArrageListOddLenghtTest()
        {
            var list = SingleLinkedList <string> .CreateList("a1");

            list.InsertLast("a2");
            list.InsertLast("a3");
            list.InsertLast("a4");
            list.InsertLast("b1");
            list.InsertLast("b2");
            list.InsertLast("b3");

            list.Print();

            try
            {
                LinkedListProblems.ReArrageList(list);
            }
            catch (ArgumentException ex)
            {
                Assert.IsTrue(ex.Message.Equals("list length should be even."), "Odd length list should throw error");
            }

            list.InsertLast("b4");
            list.InsertLast("b5");
            try
            {
                LinkedListProblems.ReArrageList(list);
            }
            catch (ArgumentException ex)
            {
                Assert.IsTrue(ex.Message.Equals("list length should be even."), "Odd length list should throw error");
            }

            list.Print();
        }
Beispiel #4
0
        public void DeleteDuplicateSingleNodeTest()
        {
            var list = SingleLinkedList <int> .CreateList(5);

            LinkedListProblems.DeleteDuplicates(list);
            list.Print();
        }
Beispiel #5
0
        public void TestNoCycle()
        {
            var list = BuildLinkedList();
            var node = LinkedListProblems.FindStartNodeOfCircularList(list);

            Assert.AreEqual(null, node);
        }
Beispiel #6
0
        public void TestFindNthNodeFromEnd()
        {
            var list1 = BuildLinkedList();
            var val   = LinkedListProblems.FindNthNodeFromEnd(list1, 2).Data;

            Assert.AreEqual(8, val);
        }
Beispiel #7
0
        public void TestPivotOverARandomNode()
        {
            var list = new SingleLinkedList <int>();

            list.InsertLast(2);
            list.InsertLast(8);
            list.InsertLast(9);
            list.InsertLast(6);
            list.InsertLast(3);
            list.InsertLast(7);
            list.Print();

            var newlist = LinkedListProblems.SplitMe(list, 6);

            newlist.Print();

            int[] result = new int[] { 2, 3, 6, 8, 9, 7 };
            var   r      = newlist.Head;

            for (int i = 0; i < result.Length; i++)
            {
                Assert.IsTrue(r.Data == result[i], "Order not correct. Position={0}, Expected={1}, Actual={2}", i, result[i], r.Data);
                r = r.Next;
            }
        }
Beispiel #8
0
        public void TestCycleStartNode()
        {
            var list = BuildLinkedList();

            var curr  = list;
            var start = list;

            //Find the last node
            while (curr.Next != null)
            {
                curr = curr.Next;
            }

            //Find an arbitary node
            for (int i = 0; i < 9; i++)
            {
                start = start.Next;
                if (start.Data == 5)
                {
                    break;
                }
            }

            // Create a cycle
            curr.Next = start;

            var node = LinkedListProblems.FindStartNodeOfCircularList(list);

            Assert.AreEqual(start.Data, node.Data);
        }
Beispiel #9
0
        public void TestSeggregateOddEven()
        {
            var list  = new Node(5).Append(1).Append(2).Append(3).Append(4).Append(6);
            var list1 = new Node(2).Append(4).Append(6).Append(5).Append(1).Append(3);
            var list2 = LinkedListProblems.SeggregateOddEven(list);

            Assert.AreEqual(0, list1.CompareTo(list2));
        }
Beispiel #10
0
 static void Main(string[] args)
 {
     //Tester tester = new Tester();
     //tester.RotateArrayTest();
     //ChangeTester changeTester = new ChangeTester();
     //changeTester.Test();
     LinkedListProblems linkedTester = new LinkedListProblems();
     linkedTester.Test();
 }
Beispiel #11
0
        public void TestRemoveNthFromEnd(int[] list, int n, int[] expected)
        {
            var linkedListProblems = new LinkedListProblems();
            var expectedResults    = SingleLinkedListNode.GenerateList(expected);
            var input = SingleLinkedListNode.GenerateList(list);

            var actualResults = linkedListProblems.RemoveNthFromEnd(input, n);

            Assert.True(SingleLinkedListNode.AreListsEqual(expectedResults, actualResults));
        }
Beispiel #12
0
        public void TestListSum()
        {
            var list1 = new Node(9).Append(9).Append(9);
            var list2 = new Node(9).Append(9).Append(9);

            var sum     = new Node(8).Append(9).Append(9).Append(1);
            var calcsum = LinkedListProblems.ListSum(list1, list2, 0);

            Assert.AreEqual(0, calcsum.CompareTo(sum));
        }
Beispiel #13
0
        public void TestReverseListRecursion(int[] list, int[] expectedOutput)
        {
            var linkedListProblems = new LinkedListProblems();

            var input           = SingleLinkedListNode.GenerateList(list);
            var expectedResults = SingleLinkedListNode.GenerateList(expectedOutput);

            var actualResults = linkedListProblems.ReverseListRecursion(input);

            Assert.True(SingleLinkedListNode.AreListsEqual(expectedResults, actualResults));
        }
Beispiel #14
0
        public void ReArrageListTwoNodeTest()
        {
            var list = SingleLinkedList <string> .CreateList("a1");

            list.InsertLast("b1");

            list.Print();

            LinkedListProblems.ReArrageList(list);

            list.Print();
        }
Beispiel #15
0
        public void TestRemoveDuplicatesWithoutBuffer()
        {
            var list1 = BuildLinkedList();
            var list2 = BuildLinkedList();

            list2.AppendToTail(1);
            list2.AppendToTail(2);

            list2 = LinkedListProblems.RemoveDuplicatesWithoutBuffer(list2);

            Assert.AreEqual(0, list1.CompareTo(list2));
        }
Beispiel #16
0
        public void TestMergeTwoLists(int[] num1, int[] num2, int[] expectedNum)
        {
            var l1 = SingleLinkedListNode.GenerateList(num1);
            var l2 = SingleLinkedListNode.GenerateList(num2);
            var expectedResults    = SingleLinkedListNode.GenerateList(expectedNum);
            var linkedListProblems = new LinkedListProblems();

            var actualResults = linkedListProblems.MergeTwoLists(l1, l2);

            Assert.NotNull(expectedResults);
            Assert.True(SingleLinkedListNode.AreListsEqual(expectedResults, actualResults));
        }
Beispiel #17
0
        public void ReArrageListNullTest()
        {
            var list = SingleLinkedList <string> .CreateList("a1");

            list.DeleteFirst();

            list.Print();

            LinkedListProblems.ReArrageList(list);

            list.Print();
        }
Beispiel #18
0
        public void TestDeleteNode()
        {
            var list = BuildLinkedList();

            var nodeTobeDeleted = list.Next.Next.Next; //the node with value 4

            Assert.AreEqual(2, list.Next.Next.Data);
            Assert.AreEqual(3, list.Next.Next.Next.Data);

            LinkedListProblems.DeleteNode(nodeTobeDeleted);

            Assert.AreEqual(2, list.Next.Next.Data);
            Assert.AreEqual(4, list.Next.Next.Next.Data);
        }
Beispiel #19
0
        public void DeleteDuplicateWhereAllUniqueTest()
        {
            var list = SingleLinkedList <int> .CreateList(5);

            list.InsertLast(2);
            list.InsertLast(8);
            list.InsertLast(9);
            list.InsertLast(7);
            list.InsertLast(3);
            list.Print();

            LinkedListProblems.DeleteDuplicates(list);
            list.Print();
        }
Beispiel #20
0
        public void ReArrageListBigListTest()
        {
            var list = SingleLinkedList <string> .CreateList("a1");

            list.InsertLast("a2");
            list.InsertLast("a3");
            list.InsertLast("a4");
            list.InsertLast("b1");
            list.InsertLast("b2");
            list.InsertLast("b3");
            list.InsertLast("b4");

            list.Print();

            LinkedListProblems.ReArrageList(list);

            list.Print();
        }
Beispiel #21
0
        public void TestMergeKListsBruteForce()
        {
            var linkedListProblems = new LinkedListProblems();

            var inputs = new int[3][] { new int[3] {
                                            1, 4, 5
                                        }, new int[3] {
                                            1, 3, 4
                                        }, new int[2] {
                                            2, 6
                                        } };
            var expectedResults = SingleLinkedListNode.GenerateList(new int[] { 1, 1, 2, 3, 4, 4, 5, 6 });

            SingleLinkedListNode[] lists = new SingleLinkedListNode[]
            {
                SingleLinkedListNode.GenerateList(inputs[0]),
                SingleLinkedListNode.GenerateList(inputs[1]),
                SingleLinkedListNode.GenerateList(inputs[2]),
            };

            var actualResults = linkedListProblems.MergeKListsBruteForce(lists);

            Assert.True(SingleLinkedListNode.AreListsEqual(expectedResults, actualResults));
        }
Beispiel #22
0
        public void TestPalindrom()
        {
            // 1->2->3->2->1
            var list = new SingleLinkedList <int>();

            list.InsertLast(1);
            list.InsertLast(2);
            list.InsertLast(3);
            list.InsertLast(2);
            list.InsertLast(1);
            list.Print();

            var isPalindrom = LinkedListProblems.IsPalindrome(list);

            Assert.IsTrue(isPalindrom, "List is a valid palindrom");

            // 1->2->3->3->2->1
            list = new SingleLinkedList <int>();
            list.InsertLast(1);
            list.InsertLast(2);
            list.InsertLast(3);
            list.InsertLast(3);
            list.InsertLast(2);
            list.InsertLast(1);
            list.Print();

            isPalindrom = LinkedListProblems.IsPalindrome(list);
            Assert.IsTrue(isPalindrom, "List is a valid palindrom");

            // 1
            list = new SingleLinkedList <int>();
            list.InsertLast(1);
            list.Print();

            isPalindrom = LinkedListProblems.IsPalindrome(list);
            Assert.IsTrue(isPalindrom, "List is a valid palindrom");

            // Empty list
            list        = new SingleLinkedList <int>();
            isPalindrom = LinkedListProblems.IsPalindrome(list);
            Assert.IsFalse(isPalindrom, "Empty List is not a valid palindrom");

            // 1->2->3->4->2->1
            list = new SingleLinkedList <int>();
            list.InsertLast(1);
            list.InsertLast(2);
            list.InsertLast(3);
            list.InsertLast(4);
            list.InsertLast(2);
            list.InsertLast(1);
            list.Print();

            isPalindrom = LinkedListProblems.IsPalindrome(list);
            Assert.IsFalse(isPalindrom, "List is not a valid palindrom");

            // 1->2->3->2
            list = new SingleLinkedList <int>();
            list.InsertLast(1);
            list.InsertLast(2);
            list.InsertLast(3);
            list.InsertLast(2);
            list.Print();

            isPalindrom = LinkedListProblems.IsPalindrome(list);
            Assert.IsFalse(isPalindrom, "List is not a valid palindrom");

            // 1->2->3->4->1
            list = new SingleLinkedList <int>();
            list.InsertLast(1);
            list.InsertLast(2);
            list.InsertLast(3);
            list.InsertLast(4);
            list.InsertLast(1);
            list.Print();

            isPalindrom = LinkedListProblems.IsPalindrome(list);
            Assert.IsFalse(isPalindrom, "List is not a valid palindrom");
        }