Drucken Sie Einfach verknüpfte Liste in umgekehrter mit Rekursion - Java
Hallo ich bin habend ein wenig Mühe, versuchen, zu drucken eine einfach verknüpfte Liste in umgekehrter Reihenfolge mittels Rekursion. Ich habe mir einige Beispiele, aber meine Methode nimmt keinen Parameter. Ich will es ausdrucken, im folgenden format ein:
input: [1, 2, 3, 4, 5] and output:[5, 4, 3, 2, 1]
erste bezieht sich auf, um den ersten Knoten in meinem einfach verknüpfte Liste und ich verwende StringBuilder
zum Aufbau meiner Liste, damit ich es zurückgeben kann am Ende.
Dies ist, was ich habe, so weit:
public String printReverse() {
StringBuilder myString = new StringBuilder("[");
if (head != null) { //base case
head = head.next;
myString.append(head.value); //line 406
myString.append(", "); //line 407
printReverse(); //line 408
}
myString = myString.append("]");
return myString.toString();
}
Bekomme ich die folgende Fehlermeldung:
Exception in thread "main" java.lang.NullPointerException
at myprog.SLL$Node.access$100(SLL.java:445)
at myprog.SLL.printReverse(SLL.java:406)
at myprog.SLL.printReverse(SLL.java:408)
at myprog.SLL.printReverse(SLL.java:408)
at myprog.SLL.printReverse(SLL.java:408)
at myprog.SLL.printReverse(SLL.java:408)
at myprog.SLLApp.myMethod(SLLApp.java:198)
at myprog.SLLApp.<init>(SLLApp.java:37)
at myprog.SLLApp.main(SLLApp.java:26)
Sehe ich nicht, was ich falsch mache, aber ich vermute, es kann die Möglichkeit sein, rufe ich die Methode auf sich selbst. Kann jemand empfehlen, was ich vielleicht falsch mache und wie ich kann, zu beheben?
Dank!
- Wenn Sie das tun
head = head.next;
sollten Sie überprüfen, um sicherzustellen, dasshead
ist nicht der Letzte Knoten in der Liste. Ansonstenhead
wirdnull
und so erhalten Sienull pointer exception
. if (head.next != null)
sollte Zustand- Ihr Kommentar
// base case
ist irreführend, da der block im innerenhead != null
ist genau das Gegenteil (d.h., rekursiven Fall). - Ich versuchte es, wie Sie vorgeschlagen, aber jetzt bekomme ich [4, ] als output. Ist mein printReverse () - Aufruf, richtig?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie über die Dinge komplizieren. Lassen Sie uns den pseudo-code:
Im code wird dies:
Es wirklich nur zwei Zeilen code) - siehe KISS.
Bezug auf die zweite private Methode, ist es sehr üblich für die öffentliche Methode eine rekursive Implementierung, legen Sie die ip-Anruf an eine private rekursive Methode mit der entsprechenden ursprünglichen Zustand.
Kann man nicht erklären, die Ergebnis-variable innerhalb der Methode. Können Sie es als parameter an eine private Hilfsmethode, obwohl. Hier ist eine Beispiel-Implementierung:
Einer Javascript-Lösung.