2016-10-04 1 views
0

Ich habe versucht, eine kreisförmige doppelt verknüpfte Liste zu erstellen und zu drucken, die Knoten enthalten würde, die Werte für jeden Buchstaben des Alphabets enthalten.Knoten zu kreisförmiger doppelt verknüpfter Liste in Java hinzufügen

Hier ist mein Code so weit:

CircularDoublyList.java

public static void main(String[] args) 
{ 
    CDLL<Character> head = null; 
    CDLL<Character> tail = null; 

    CDLL <Character> p = null; 
    for(char c = 'A'; c <= 'Z'; c++) { 
     p = new CDLL<Character>(c, null, null);   
     if (head == null) 
     { 
      p.setNext(p); 
      p.setPrevious(p); 
      head = p; 
      tail = head; 
     } 
     else 
     { 
      p.setPrevious(tail); 
      tail.setNext(p); 
      head.setPrevious(p); 
      p.setNext(head); 
      head = p;  
     } 
    } 

    print(p); 
} 

public static void print(CDLL<Character> list) { 
    String str = ""; 
    while(list != null) { 
     str += list.getPrevious().getValue() + " ";   
     list = list.getPrevious(); 
    } 
    System.out.print(str); 
} 

Ausgabe: ich das Drucken der Liste habe versucht, aber nichts scheint zu zeigen, und ihre sind keine Fehler Nachricht in der Konsole. Jede Hilfe wäre willkommen.

+0

Sie sollten ein liefern [MCVE] das ist Ihr Problem zeigt. Dieser Code ist sowohl unvollständig als auch zu lang. –

+0

Dies wird am besten gelöst, indem Sie dies zuerst mit einem Debugger ausführen und dann nur hierher kommen, wenn Sie immer noch nicht weiterkommen, ** zeigen und uns sagen, was der Debugger Ihnen sagt **. –

Antwort

2

Nun, da die Liste kreisförmig ist, der Code:

while(list != null) { 
    str += list.getPrevious().getValue() + " ";   
    list = list.getPrevious(); 
} 

wird auch weiterhin im Kreis und wird nie aufhören.

einfach Ihre Methode ändern zu stoppen, wenn es wieder den ersten Knoten findet:

public static void print(CDLL<Character> list) { 
    String str = ""; 
    CDLL<Character> first = null; 
    while (true) { 
    str += list.getPrevious().getValue() + " "; 
    if (first == null) 
     first = list.getPrevious(); 
    else if (first == list.getPrevious()) 
     break; 
    list = list.getPrevious(); 
    } 
    System.out.print(str); 
} 
+0

Es war eine lange Nacht ... danke. – NotToBrag

Verwandte Themen