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, dass head ist nicht der Letzte Knoten in der Liste. Ansonsten head wird null und so erhalten Sie null pointer exception.
  • if (head.next != null) sollte Zustand
  • Ihr Kommentar // base case ist irreführend, da der block im inneren head != 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?
InformationsquelleAutor o.o | 2013-05-15
Schreibe einen Kommentar