Вы проделали этот путь труднее, чем нужно. Попробуйте что-нибудь вроде этого:
public class Solution {
public static int indexOfNRec(LinkedListNode<Integer> head, int n) {
return solution(head, n, 0);
}
private static int solution(LinkedListNode<Integer> head, int searchFor, int index) {
if(head == null )
{
return -1;
}
if(head.data == searchFor)
{
return index;
}
return solution(head.next, searchFor, index + 1);
}
}
Полагаю, ваш учитель сказал вам подпись используемого метода. Обратите внимание, что использовать переменные stati c так, как вы это сделали, действительно некрасиво, поскольку это не будет работать в многопоточной среде. Кроме того, поскольку вы никогда не очищаете их, это решение работает один раз. Если вас вызовут несколько раз, вы получите неправильное значение после первого вызова.
Итак, я сохранил вашу исходную подпись метода, но связал ее с методом, который получает индекс, который вы собираетесь вернуть . Это устраняет переменную stati c, что делает ваш код реентерабельным - потокобезопасным и может использоваться более одного раза.
Сам метод очень прост. Выполните нулевую проверку и верните нулевое значение. В противном случае, если мы найдем данные - отлично. Возвращение. Если нет, используйте рекурсию.
Это важный шаблон для понимания. Убедитесь, что вы знаете, что он делает, и убедитесь, что вы проводите тестирование с различными значениями. Я НЕ запускал это через компилятор, поэтому могут быть ошибки. Но, по крайней мере, вы можете видеть направление, в котором я шел.