Verkette Liste Eintrag verschwindet

forsti222

Mitglied
Zuerst einmal zu dem Problem was ich habe. Man soll in eine Liste eben 3 Mal einen Namen eingeben können und dann soll das ganze als Liste sortiert ausgegeben werden. Bis jetzt habe ich folgenden Code, aber da verschwindet immer der Läufer nummer 2 und ich weiß nicht warum. Kann mir jemand helfen?

Code:
Java:
import java.io.*;	
public class MarathonTimeManagement {
	private Attendee start;
  
	public MarathonTimeManagement() {
	// Konstruktor für leere Liste
	start = null;
	}
  
	public void einfuegen(Attendee neu) {
    
		// 1. Fall: Liste ist noch leer
   	 if (start == null) {
   	 	 start = neu;
   	 	 return;
   	 }
   	 boolean ok = false;
   	 for(int i =0; i< neu.getName().length() && i < start.getName().length();i++)
   	 {
   	 	  if(start.getName().charAt(i) < neu.getName().charAt(i))
   	 	  {
   	 	  	  break;
   	 	  }
   	 	  ok = true;
   	 }
   	 // 2. Fall: neues Element kommt an den Anfang der Liste
   	 
	 if (ok == true ) {a
   	 	 neu.next = start;
   	 	 start = neu;
   	 	 return;
   	 }
    
    // 3. Fall: Liste durchlaufen
    Attendee letzter = start;
    Attendee aktuell = start.next;
    
   while ((aktuell != null) && (aktuell.getName().charAt(0) < neu.getName().charAt(0))) {
     aktuell = aktuell.next;
     letzter = letzter.next;
    }
    
    // gefunden, jetzt einfügen
    letzter.next = neu;
    if (aktuell != null) {    // neu ist nicht letztes Element
      neu.next = aktuell;
    }
  }
  
  public void ausdrucken() {
    Attendee aktuell = start;
    while (aktuell != null) {
      System.out.println(aktuell.getName());
      aktuell = aktuell.next;
    }
  }
  public static void main(String[] args) throws IOException {
    System.out.println("Name des Läufers 1 eingeben:");
    String s = Input.readString();
    
    // starte mit leerer Liste
    MarathonTimeManagement sortierListe = new MarathonTimeManagement();
     Attendee neu = new Attendee(s);
      sortierListe.einfuegen(neu);
        System.out.println("Name des Läufers 2 eingeben:");
    String x = Input.readString();
         Attendee neu2 = new Attendee(x);
            System.out.println("Name des Läufers 3 eingeben:");
    String y = Input.readString();
         Attendee neu3 = new Attendee(y);
      sortierListe.einfuegen(neu3);
    // gib die Liste aus
    sortierListe.ausdrucken();
  }
	}
Java:
public class Attendee {
	private String name;
	public int anzahlZwischenZeiten = 0;
	public Attendee next=null;
	public TimeStamp timeStamps = null;
	
	public Attendee(String name){
		this.name = name;
		next=null;
	}
  
  // Konstruktor mit Ziel
  	public Attendee(String name, Attendee next) {
  		this.name = name;
  		next = next;
  }
	
	public String getName(){
		return name;
	}
	

}

Danke für eure Hilfe :)
 
Du rufst nur zwei mal "einfuegen" auf ;)

Edit:
Und noch als Tipp: Dein Schleifen Konstrukt, in welchem du Zeichen für Zeichen der Strings vergleichst, kannst du dir Sparen, indem du die "compareTo"-Methode des Strings benutzt.
 
Danke schön, die leichtesten Sachen übersieht man und ärgert sich recht...

Hätte noch eine Frage gleich und zwar das Löschen funktioniert auch nicht ganz wie ich will, da immer der 2. Gelöscht wird und nie der eigentliche.

Java:
 public void deleteAttendee(String name)
  {
  	  Attendee aktuell = start;
  	 if (aktuell != null) {
         if (aktuell.getName().equals(name)== false) {
            aktuell = aktuell.next;
         } else {  
            Attendee p = aktuell;
            while(p.next != null && p.next.getName().equals(name)) {
              p = p.next;
            }
            if (p.next != null) {
               p.next = p.next.next;
            }
         } 
      }

  }
 
Zurück