public static LinkedListNode reverse_recursive(LinkedListNode head) {
if (head == null || head.next == null) {
return head;
}
Если узел (в нашем случае заголовок) равен нулю или следующий узел равен нулю (это означает, что существует только один узел), то вернуть этот один узел, потому что вы не можете отменить нулевую ссылку илисписок только с одним узлом (в основном он уже перевернут).Это базовый случай для рекурсивного решения.
LinkedListNode reversed_list = reverse_recursive(head.next);
Мы отправляем следующий узел в рекурсивную функцию, например, если в нашем списке три узла 1-> 2-> 3, тогда мы будем отправлять второй узелв reverse_recursive функцию.Функция вернет 3-> 2, а reversed_list будет указывать на узел 3. И теперь нам нужно соединить узел 1 с обратным списком 3-> 2.
head.next.next = head;
head.next (узел 2) будетуказывает на (head.next.next) узел 1 (head).
head.next = null;
Поскольку узел 1 является последним узлом, он должен указывать на ноль, что означает, что больше нет узлов.
return reversed_list;
И теперь нам нужно только вернуть правильную ссылку (первый узел обратного списка).