2012-11-07 7 views
8

Ich arbeite an einem Programm, das die Java-Klasse der verknüpften Liste nicht verwendet; Ich baue es von Grund auf neu. Ich war erfolgreich mit allem außer dem Schreiben einer Methode, die einen Knoten in eine bestimmte Position der verknüpften Liste einfügt.Einfügen von Knoten in die Mitte der verknüpften Liste und versehentliches Einfügen von Nullknoten

Ich habe eine Methode, die einen bestimmten Knoten als "aktuellen" Knoten setzt. So zum Beispiel habe ich eine verknüpfte Liste, die wie folgt aussieht: Katzen ->Hunde -> machen ->gut ->Haustiere und "Strom" ist gleich 2; das bedeutet, dass der "aktuelle" Knoten "Hunde" ist.

Von hier, sagen wir, ich möchte einen neuen Knoten an der Position von "aktuelle" einfügen, deren Info-Feld und lautet. Wenn es richtig gemacht, wird die endgültige verknüpfte Liste sein: Katzen ->und ->Hunde -> machen ->gut ->Haustiere; "und" wird "Hunde" an Position 2 ersetzen.

Also hier ist mein Problem: meine Methode funktioniert, um einen neuen Knoten an Position zwei einzufügen, aber etwas schief geht mit der Verknüpfung des neu erstellten Knoten zu bereits vorhandenen Knoten. Ich füge nicht nur meinen neuen Knoten in die Liste ein, sondern füge auch einen Knoten ohne Informationen vor "Hunden" ein. Wie mein Code zur Zeit läuft, sieht die Ausgabe wie folgt aus: Katzen ->und -> (Leerzeichen) ->Hunde ->gut - ->Haustiere> machen.

Ich bin 99,9% sicher, dass das Problem in der (wenn aktuell! = Null) Teil des Codes liegt, ich kann einfach nicht herausfinden, wie es zu beheben ist.

Irgendwelche Gedanken darüber, warum ich zusätzlich zu dem Knoten, den ich hinzufügen möchte, einen leeren Knoten hinzufüge?

public void insert() { 

    System.out.println("Please enter the text you wish to insert, or type \"end\" if you are done inserting."); 
    String theString; 
    theString = console.nextLine(); 

    while (!theString.equals("end")){ 
     newNode = new Node(); 
     newNode.info = theString; 
     newNode.next = null; 

     if (first == null){ 
      first = newNode; 
      last = newNode; 
     } else if (current != null){ 
      Node p = new Node (current.info, current.next); 
      current.info = newNode.info; 
      current.next = p; 
     } 
     else { 
      last.next = newNode; 
      last = newNode; 
     } 

     System.out.println("Please enter the text you wish to insert, or type \"end\" if you are done inserting."); 
     theString = console.nextLine(); 
    } 
} 

EDIT

Das gesamte Programm ist ziemlich lang, aber hier ist die „SetLine“ Methode, die auf Strom, der gleich setzt, was auch immer Position wünscht der Benutzer an ihren Knoten einzufügen. Es nimmt einen Parameter "int line" an, der über eine Benutzereingabeaufforderung erhalten wird.

public Node setLine(int line) { 

    int index = 0; 
    current = first; 
    while (index < line) { 
     previous = current; 
     current = current.next; 
     index++; 
    } 
    return current; 
} 
+0

Diese Art von Sache müssen Sie Schritt für Schritt durcharbeiten, im Allgemeinen mit vielen System.out.println-Aufrufen. Es ist wirklich ein ziemlich häufiges Problem, aber man muss sich selbst herausfinden. –

+1

Beachten Sie, dass Sie den Fall misstrauen sollten, in dem Sie den zweiten neuen Knoten erstellen - Sie sollten nur einen für jeden Einsatz benötigen. –

+0

Was ist 'Konsole', ein' java.util.Scanner'? –

Antwort

-1

Sie können die folgende Methode verwenden, die Knoten in der Mitte basierend auf dem Index einfügt.

+0

Nicht, was gefragt wurde. – EJP

Verwandte Themen