2015-12-26 3 views
1

Мне нужно написать метод getNodeAt() рекурсивно.getNodeAt рекурсивно java

Это оригинальный метод:

private Node getNodeAt(int givenPosition) { 
    Node currentNode=firstNode; 
    for (int i =0; i < givenPosition; i++) 
     currentNode=currentNode.next; 
    return currentNode; 
} 

Это моя попытка:

private Node getNodeAt(int givenPosition) { 
    Node currentNode; 
    if (givenPosition == 0) { 
     return currentNode = firstNode; 
    } else { 
     return getNodeAt(givenPosition - 1); 
    } 
} 

ответ

2

Вы должны заранее определенная Node ссылки на следующий узел в каждом рекурсивном вызове, который означает, что необходимо дополнительное аргумент:

private Node getNodeAt(Node currentNode, int givenPosition) { 
    if (givenPosition == 0){ 
     return currentNode; 
    }else { 
     return getNodeAt(currentNode.next, givenPosition - 1); 
    } 
} 

И начальный вызов метода будет

Node node = getNodeAt (firstNode, someIndex); 

или вы можете создать дополнительный метод, который будет содержать первоначальный вызов:

public Node getNodeAt(int givenPosition) { 
    return getNodeAt (firstNode, givenPosition); 
} 
+0

спасибо, это работа – ialhamad