public void Should_Get_Kth_From_Tail()
        {
            var input    = new LinkedNodeList <int>(new[] { 1, 2, 3, 4, 5 });
            var expected = new LinkedNodeList <int>(new[] { 4, 5 });

            LinkedNodeUtilities.GetKthFromEnd(input.Head, 2).Should().BeEquivalentTo(expected.Head);

            LinkedNodeUtilities.GetKthFromEnd(input.Head, 5).Should().BeEquivalentTo(input.Head);
            LinkedNodeUtilities.GetKthFromEnd(input.Head, 1).Should().BeEquivalentTo(input.Last());
        }
        public void Should_Throw_Exception_For_Invalid_Kth_From_Tail()
        {
            var input = new LinkedNodeList <int>(new[] { 1, 2, 3, 4, 5 });

            var ex = Assert.Throws <Exception>(() => LinkedNodeUtilities.GetKthFromEnd(input.Head, 6));

            ex.Message.Should().Be("Invalid k is larger than linked list length");

            var ex2 = Assert.Throws <Exception>(() => LinkedNodeUtilities.GetKthFromEnd(input.Head, 0));

            ex2.Message.Should().Be("K should be larger than 0");

            LinkedNodeUtilities.GetKthFromEnd <int>(null, 0).Should().BeNull();
        }