2017-06-23 2 views
0

Ich schreibe eine Methode in Java, um das gleiche Zeichen (nur eines davon) in einer Liste zu löschen.Delete Same In Sortierte Liste

Dies ist die Methode:

public void deleteSameInSortedList(){ 
    CharNode p=head.getNext(); 
    CharNode temp=p; 
    for(p = head; p != null; p = p.getNext()){ 
     temp=p; 
     while(p.getNext()!=null&& p.getLetter()==p.getNext().getLetter()){   
      System.out.println(p.getLetter()); 
      p=p.getNext(); 
     } 

//// Ich denke, das eine Endlosschleife verursacht.

 temp.setNext(p); 
    } 
} 

Aber das ist, wie der Knoten zum Drucken auf den nächsten Knoten, der nicht derselbe ist, zu machen. Habe ich eine Missachtung mit meinem Code? Was kann ich tun, um diese Aufgabe zu erfüllen?

Antwort

0

Die Endlosschleife passierte, weil, wenn der Code zu einem Knoten kam, der nicht den gleichen Buchstaben hatte, dann der Knoten danach, konnte er den Knoten nicht setzen, um auf ihn selbst zu zeigen.

Deshalb habe ich flag (boolean) erstellt, die verfolgen wird, wann wir einen Knoten setzen müssen.

1

Vielleicht sollten Sie in Pseudo-Code oder menschenlesbare Sprache aufschreiben, was Sie erreichen möchten und wie dies getan werden könnte. Etwas wie:

Iterate over each element 
    If the element's value is the same as the next element's value 
    If there is an element after the next one 
     Set the next element pointer of the current element to the element after the next one 
    Else 
     Set the next element pointer to null 

Einige weitere Bemerkungen:

  • Initialisierung von p außerhalb des foor Schleife scheint überflüssig zu sein, wie es in der for-Schleife
  • Initialisierung der Temperatur außerhalb des foor initialisiert Schleife scheint überflüssig zu sein, sowie es in der for-Schleife
  • initialisiert wird Mischen für und while-Schleifen in einem Frieden von Code ist nicht einfach zu lesen. Sie sollten bei einem bleiben, wenn möglich
  • Was ist der Rückgabetyp der getLetter-Methode? Wenn es sich nicht um einen einfachen Typ handelt, sollten Sie equals anstelle von == verwenden, um zu überprüfen, ob die Werte identisch sind. Andernfalls prüfen Sie, ob es sich um die gleiche Instanz handelt
Verwandte Themen