Я пытаюсь изменить LinkedList с помощью рекурсивных вызовов, пожалуйста, дайте мне знать, где я ошибаюсь, я не могу поймать обратную голову LL. LLNode - это узел связанного списка, а ReverseLLRecursively.reverse - это функция, которую я написал для реверсирования.Рекурсивно реверсивный связанный список
Вот мой код:
public class LLNode {
private int data;
private LLNode next;
public LLNode(int data, LLNode next) {
this.data = data;
this.next = next;
}
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
public LLNode getNext() {
return next;
}
public void setNext(LLNode next) {
this.next = next;
}
@Override
public String toString() {
return data + "->[" + (next!=null?next.data:"") + "]";
}
}
public class ReverseLLRecursively {
public static LLNode newHead = new LLNode(-1, null);
public static LLNode reverse(LLNode head, LLNode newHead) {
if(head==null || head.getNext()==null) {
newHead = head;
return head;
}
LLNode node = reverse(head.getNext(), newHead);
node.setNext(head);
head.setNext(null);
return node.getNext();
}
public static void main(String[] args) {
LLNode ll = new LLNode(1,new LLNode(2, new LLNode(3, new LLNode(3, new LLNode(2, new LLNode(3, null))))));
reverse(ll , newHead);
System.out.println(newHead);
}
}
Я знаю, что в Интернете имеются готовые решения для реверсирования LL. Но это не поможет мне понять, где я ошибся в рекурсии. – user2725673
Вы пытаетесь сделать много вещей и в итоге все делаете неправильно. У вас есть 2 механизма. Оба не работают. Вам просто нужно 1, что является returnValue обратного (11); У меня статическая и нестатическая версия в моем ответе, сравните их с вашими и посмотрите на разницу (хотя моя версия несколько понятна, потому что это правильно имена). Также научитесь правильно называть вещи, все ваши имена и переменные подвергаются насилию и вы не понимаете свой собственный код. – HopefullyHelpful
просто переименуйте переменную метода: public static LLNode reverse (LLNode head, LLNode ** newHead **), а затем узел LLNode = reverse (head.getNext(), ** newHead **); Это сработает. –