public void ReturnKthToLastTest(int k, int expected)
        {
            var testList = new LinkedList(new int[] { 1, 2, 3, 2, 1, 4, 5, 6, 5, 4, 3, 2, 1, 10, 1 });
            int result   = Question_2_2.ReturnKthToLast(testList, k);

            Assert.AreEqual(expected, result, $"{k}th element {expected} is expected but got {result}.");

            result = Question_2_2.ReturnKthToLastRecursive(testList, k);
            Assert.AreEqual(expected, result, $"{k}th element {expected} is expected but got {result} - recursive.");

            result = Question_2_2.ReturnKthToLastOnePass(testList, k);
            Assert.AreEqual(expected, result, $"{k}th element {expected} is expected but got {result} - one pass.");
        }
        public void ReturnKthToLastRecursiveTest_InvalidCases()
        {
            try
            {
                int k = 2;
                Question_2_2.ReturnKthToLastRecursive(new LinkedList(new int[] { 1 }), k);
                Assert.Fail($"ArgumentOutOfRangeException was not thrown for invalid k={k}.");
            }
            catch (ArgumentOutOfRangeException) { }

            try
            {
                int k = -1;
                Question_2_2.ReturnKthToLastRecursive(new LinkedList(new int[] { 1 }), k);
                Assert.Fail($"ArgumentOutOfRangeException was not thrown for invalid k={k}.");
            }
            catch (ArgumentOutOfRangeException) { }
        }