2016-10-21 7 views
0

Ich habe ein bisschen Ärger mit einer kleinen Java-Aktivität, die sich mit dem Suchen und Löschen einer verknüpften Liste beschäftigt.Suchen und Löschen in einer verknüpften Liste

Hier sind die Probleme:

  • ein Menü Methode Haupt hinzufügen Hinzufügen zu Kopf zu handhaben, aus dem Kopf zu löschen und ein aufgelistet linked anzeigt.
  • Fügen Sie dann eine Menüauswahl zum Löschen eines bestimmten Elements in der Liste hinzu und löschen Sie es (fordern Sie den Benutzer auf, eine Zeichenfolge zu löschen - und suchen Sie sie dann in der verknüpften Liste und löschen Sie dieses Element aus der Liste).

Hier sind die Klassen:

public class LLNode { 

    private String data; 
    private LLNode next; 

    public LLNode() { 
     this.data = null; 
     this.next = null; 
    } 
    public LLNode (String newData) { 
     this.data = (newData); 
     this.next = null; 
    } 
    public void updateNode (LLNode nextOne) { 
     this.next = nextOne; 
    } 
    public String toString() { 
     return this.data; 
    } 
    public LLNode getNext() { 
     return this.next; 
    } 
} 


public class LList { 

    private LLNode head; 

    public LList() { 
     head = null; 
    } 
    public void addAtHead (String newData) { 
     LLNode newNode = new LLNode (newData); 
     newNode.updateNode(head); 
     head = newNode; 
    } 

    public void display() { 
     LLNode temp = head; 
     while (temp != null) { 
      System.out.println (temp); 
      temp = temp.getNext(); 
     } 
    } 

    public LLNode deleteAtHead () { 
     LLNode removedOne = head; 
     head = head.getNext(); 
     return removedOne; 
    } 

} 

public class LinkedListExample { 

    public static void main(String[] args) { 
     LList list = new LList(); 

     list.addAtHead("Bob"); 
     list.addAtHead("Tom"); 
     System.out.println("The list is "); 
     list.display(); 

     LLNode removedOne = list.deleteAtHead(); 
     System.out.println("After delete, the list new is "); 
     list.display(); 
     System.out.println("The one that was deleted is..." + removedOne); 


    } 

} 
+1

Welches Problem haben Sie? –

+0

Was hast du probiert? Wir sind nicht hier, um Ihre Übung zu machen;) –

+1

Was ist das genaue Problem? Ihr Code sieht gut aus, außer dass die 'deleteAtHead'- und' addAtHead'-Methoden von einem Null-Check profitieren könnten. Ich nehme an, dass dieser Code Hausaufgaben ist, da Java eine 'LinkedList' eingebaut hat. –

Antwort

0
  1. Für ein Menü Erstellen würde ich empfehlen, eine while-Schleife verwenden. Sie möchten einen Scanner verwenden, der nach gültigen Eingaben sucht und nach der Eingabe des Menüs sucht.

{

public void main(String[] args) { 
string input; 

Scanner n = new Scanner(System.in); 
while (!(input.equals("exit")) { 

System.out.println("menu item 1"); 
System.out.println("menu item 2"); 
System.out.println("etc"); 

input = n.nextLine(); 
switch (input) { 
case "menu 1": //do whatever menu 1 is 
case "menu 2": //do whatever menu 2 is 
case "exit": //exit // save whatever 
default: System.out.println("message not understood"); 
    } 
} 

Dies ist eine Methode enthält. Dies sollte Ihnen einen starken Hinweis darauf geben, wie Sie ein Element in der verknüpften Liste finden und wie Sie es löschen können. (Ich überlasse das Ihnen, da dies relativ einfach ist und Sie lernen müssen).

public boolean contains(String str) { 
Node ref; 
while (ref != null) 
    ref = ref.next; 
    if (ref.data == str) { 
    return true; 
    } 
return false; 
} 
+0

Weitere Hinweise: Standardkonstruktoren, die Werte festlegen, auf die Sie als null zugreifen würden, sind schlecht. Setzen Sie das Datenfeld auf "" (leere Zeichenfolge). In diesem Fall können Sie argumentieren "Nun, die Node-Klasse ist privat, der Benutzer kann nicht darauf zugreifen", also warum hätten Sie einen Standardkonstruktor? Ändern Sie den Standardkonstruktor, oder löschen Sie ihn. (Es ist nur schlechte Praxis) – Jjoseph

Verwandte Themen