示例#1
0
        // Time: O(n)
        // Space: O(n)
        public static LinkedListNode PartitionLinkedList(LinkedListNode head, int partition)
        {
            var leftList  = new List <int>();
            var rightList = new List <int>();

            var current = head;

            while (current != null)
            {
                if (current.Data < partition)
                {
                    leftList.Add(current.Data);
                }
                else
                {
                    rightList.Add(current.Data);
                }
                current = current.Next;
            }

            // concat rightList to end of the leftList
            leftList.AddRange(rightList);

            return(LinkedListNode.CreateLinkedList(leftList));
        }
        public void LoopDetection_ShouldReturnNull()
        {
            // Assign
            var testList = LinkedListNode.CreateLinkedList(new int[] { 1, 2, 3, 4, 5, 6 });

            // Act
            var result = Solution.LoopDetection(testList);

            // Assert
            Assert.AreEqual(null, result);
        }
示例#3
0
        public void KthToLastTwoPointers_ShouldReturnCorrectValue()
        {
            // Assign
            var testList = LinkedListNode.CreateLinkedList(new int[] { 35, 15, 4, 20, 99, 6 });

            // Act
            var result = Solution.ReturnKthToLastTwoPointers(testList, 3);

            // Assert
            Assert.AreEqual(20, result.Data);
        }
        public void SumListsReverseOrder_ShouldReturnCorrectLinkedList()
        {
            // Assign
            var testListA = LinkedListNode.CreateLinkedList(new int[] { 7, 1, 6 });
            var testListB = LinkedListNode.CreateLinkedList(new int[] { 5, 9, 2 });

            // Act
            var resultList = Solution.SumListsReverseOrder(testListA, testListB);

            // Assert
            Assert.AreEqual("2 -> 1 -> 9 -> null", resultList.LinkedListToString());
        }
示例#5
0
        public void PartitioniLinkedList_ShouldReturnCorrectLinkedList()
        {
            // Assign
            var testList  = LinkedListNode.CreateLinkedList(new int[] { 3, 5, 8, 5, 10, 2, 1 });
            var partition = 5;

            // Act
            var resultList = Solution.PartitionLinkedList(testList, partition);

            // Assert
            Assert.AreEqual("3 -> 2 -> 1 -> 5 -> 8 -> 5 -> 10 -> null", resultList.LinkedListToString());
        }
        public void DeleteMiddleNode_ShouldRemoveCorrectNode()
        {
            // Assign
            var test = LinkedListNode.CreateLinkedList(new int[] { 1, 2, 3, 4, 5, 6 });

            Console.WriteLine(test.LinkedListToString());

            // Act
            Solution.DeleteMiddleNode(test);

            // Assert
            Assert.AreEqual("1 -> 2 -> 4 -> 5 -> 6 -> null", test.LinkedListToString());
        }
示例#7
0
        public void IsPalindrome_ShouldReturnTrue()
        {
            // Assign
            var testListA = LinkedListNode.CreateLinkedList(new int[] { 7, 1, 6, 2, 6, 1, 7 });
            var testListB = LinkedListNode.CreateLinkedList(new int[] { 7, 1, 6, 6, 1, 7 });

            // Act
            var res  = Solution.IsPalindrome(testListA);
            var res1 = Solution.IsPalindrome(testListB);

            // Assert
            Assert.AreEqual(true, res);
            Assert.AreEqual(true, res1);
        }
        public void RemoveDup_ShouldRemoveDuplicateNode()
        {
            // Assign
            var test  = LinkedListNode.CreateLinkedList(new int[] { 2, 3, 3, 3, 1, 4, 2, 1, 5 });
            var test1 = LinkedListNode.CreateLinkedList(new int[] { 1, 1, 1, 1, 1, 1 });

            // Act
            //var result = Solution.RemoveDup(test);
            //var result1 = Solution.RemoveDup(test1);

            var result  = Solution.RemoveDupTwo(test);
            var result1 = Solution.RemoveDupTwo(test1);

            // Assert
            Assert.AreEqual("2 -> 3 -> 1 -> 4 -> 5 -> null", result.LinkedListToString());
            Assert.AreEqual("1 -> null", result1.LinkedListToString());
        }
示例#9
0
        public void NthFromEnd_ShouldReturnCorrectNode()
        {
            // Assign
            var head  = LinkedListNode.CreateLinkedList(new int[] { 7, 6, 5, 4, 3, 2, 1 });
            var head2 = LinkedListNode.CreateLinkedList(new int[] { 1, 2, 3, 4 });

            // Act
            var res  = Solution.NthFromEnd(head, 1);            // should return 1
            var res1 = Solution.NthFromEnd(head, 5);            // should return 5
            var res2 = Solution.NthFromEnd(head2, 2);           // should return 3
            var res3 = Solution.NthFromEnd(head2, 5);           // should return null

            // Assert
            Assert.AreEqual(res.Data, 1);
            Assert.AreEqual(res1.Data, 5);
            Assert.AreEqual(res2.Data, 3);
            Assert.IsNull(res3);
        }
示例#10
0
        public void KthToLastRecursive_ShouldPrintCorrectValue()
        {
            var testList = LinkedListNode.CreateLinkedList(new int[] { 99, 88, 77, 44, 33, 22, 11, 666, 2 });

            var result = Solution.ReturnKthToLastRecursive(testList, 9);
        }