Что на самом деле происходит в коде здесь - PullRequest
0 голосов
/ 26 мая 2020

void reverse (Node head) {if (head == null) return;

    reverse(head.next);
    System.out.print(head.data+" ");
}

Ответы [ 2 ]

3 голосов
/ 26 мая 2020

Он печатает содержимое связанного списка с конца.

Рассмотрим этот простой список: 1 -> 2 -> 3

Теперь давайте «разложим» вызовы:

reverse(1) :
    reverse(2) :
        reverse(3) :
        print(3)
    print(2)
print(1)

Волшебство c происходит потому, что println вызывается после вызова рекурсии! Попробуйте поставить перед тем, как распечатать список в обычном порядке.

1 голос
/ 26 мая 2020

По сути, вы обращаете вспять процесс отслеживания связанного списка.

void reverse(Node head) {
        if(head==null) //if head points to nothing
             return;
        reverse(head.next); #if head points to something, move one position in reverse, because of the recursion, the function is called again before printing anything
        System.out.print(head.data+" "); #print the data stored in the nodes, reversed
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...