Verkettete Liste

orcale

Mitglied
Guten Tag,

ich stehe irgendwie auf dem Schlauch und kommen einfach nicht weiter. Und zwar habe ich eine Verkettete Liste. Bei dieser möchte einmal das erste Element der Liste mit dem letzen Element tauschen, sodass das erste Element das letzte Element der Liste wird und das letzte Element das erste Element.

Könntet ihr mit Tipps geben?

Ich habe meinen Code einfach mal unten angehängt.

mit freundlichen Grüßen orcale


Java:
public class VerketteteListe implements Liste {

	private Eintrag kopf; // Anfang
	private Eintrag aktuell; // Zeiger

	public VerketteteListe() {
		kopf = new Eintrag();
		aktuell = kopf;
		aktuell.nf = null;
	}

	@Override
	public boolean istLeer() {
		return (kopf.nf == null);
	}

	@Override
	public void reset() {
		aktuell = kopf;
	}

	@Override
	public boolean istAmEnde() {
		return (aktuell.nf == null);
	}

	@Override
	public void vor() {
		if (!istAmEnde()) {
			aktuell = aktuell.nf;
		}
	}

	@Override
	public Object getElement() {
		if (!istAmEnde()) {
			return aktuell.nf.inhalt;
		}
		return null;
	}

	@Override
	public void einfuegen(Object x) {
		Eintrag temp = new Eintrag();
		temp.inhalt = x;
		temp.nf = aktuell.nf;
		aktuell.nf = temp;
	}

	@Override
	public void loeschen() {
		if (!istAmEnde()) {
			aktuell.nf = aktuell.nf.nf;
		}
	}

	public void zumAnfang() {
		aktuell = kopf;
	}

	public void zumEnde() {
		if (!istLeer()) {
			if (!hatZugriff()) {
				zumAnfang();
			}
			while (aktuell.nf != null) {
				vor();
			}
		}
	}

	public boolean hatZugriff() { // Zeiger befindet sich auf ein Listenelement
		return aktuell != null;
	}

	

	/**
	 * Gibt einen String zurueck mit einer Ansicht der Liste zurueck.
	 */
	public String toString() {
		String r = "";
		int count = 0;

		// an den Anfang springen
		reset();

		// Alle Elemente der Liste durchgehen
		while (!istAmEnde()) {
			r += "Element: " + getElement().toString() + "\n";

			// vorruecken
			vor();

			// Zaehler erhoehen
			count++;
		}

		// Laenge an den Anfang schreiben
		r = "length " + count + "\n" + r;
		return r;
	}
}


Java:
public class VerketteteListeMain {

	public static void main(String[] args) {

		// ein paar Studentenobjekte erzeugen
		Student s1 = new Student("Willy Wichtig", 123);
		Student s2 = new Student("Susi Sorglos", 89);
		Student s3 = new Student("Max Muster", 112);

		// Neue Liste erstellen, Zugriff ist nur ueber Interfacemethoden moeglich
		Liste l = new VerketteteListe();

		// Einfügen in Liste, so dass sie nach aufsteigender Matrikelnummer sortiert ist:
		// Wir gehen so lange in der Liste weiter vor, wie die Matrikelnummer
		// des Studenten sn groesser als die Matrikelnummer des aktuellen
		// Elements ist. Danach muessen wir einfuegen.
		while (!l.istAmEnde() && s1.matnr > ((Student) l.getElement()).matnr) {
			l.vor();
		}
		
		// s.matnr ist jetzt groesser --> einfuegen
		l.einfuegen(s1);
		

		// nochmal fuer s2
		while (!l.istAmEnde() && s2.matnr > ((Student) l.getElement()).matnr) {
			l.vor();
		}
		l.einfuegen(s2);
		
		// nochmal fuer s3
		while (!l.istAmEnde() && s3.matnr > ((Student) l.getElement()).matnr) {
			l.vor();
		}
		l.einfuegen(s3);
		l.aufgabe1();
		
		// Ansicht der Liste ausgeben --> sortiert?
		System.out.println(l.toString());

	}
}


Java:
public interface Liste {

	public boolean istLeer();

	public void reset();

	public boolean istAmEnde();

	public void vor();

	public Object getElement();

	public void einfuegen(Object x);

	public void loeschen();
	public void aufgabe1();
}

Java:
public class Eintrag {
	public Eintrag nf;
	public Object inhalt;
}

Java:
public class Student {
	public String name;
	public int matnr;

	public Student(String name, int matnr) {
		this.name = name;
		this.matnr = matnr;
	}

	public String toString() {
		return "(Student: name = " + name + "; matnr = " + matnr + ")";
	}
}
 

DrZoidberg

Top Contributor
Deine einfügen Methode fügt den neuen Eintrag hinter den aktuellen ein und nicht davor. Das führt dann dazu das die Liste nicht korrekt sortiert wird.
Du solltest in deine Eintrag Klasse noch ein Feld hinzufügen das auf den vorherigen Eintrag verweist, dann kannst du noch eine zurück Methode in deine Liste einfügen.
Danach kannst du dann den Code für das Einfügen korrigieren.
"istLeer" sieht auch falsch aus. Wie soll denn eine leere Liste aussehen? Soll der Kopf null sein oder der Inhalt des Kopfs?
 

orcale

Mitglied
Das kopf-Element bekommt keinen Inhalt. Es soll nur auf das erste Element der Liste verweisen. Ich möchte keinen doppelt verkettete Liste daraus machen, sondern bei einer einfach verketteten Liste bleiben. Sollte ich die Methode einfügen so ändern das es danach einfügt? Was hat es denn für Vorteile, wenn ich das ändere?
 

nomuri

Aktives Mitglied
Naja du hast doch einen "Zeiger" auf den Start der Liste und einen "Zeiger" aufs Ende der Liste und jedes Element kennt seinen Nachfolger oder?

Somit brauchst du nur die "Zeiger" anpassen.
 

orcale

Mitglied
Ich habe einen Zeiger, der heißt aktuell, mit dem ich die Liste durchgehen kann. Dann habe ich noch einen kopf, der auf das erste Element der Liste zeigt, also kopf.nf ist das erste Element. Jedes Element kennt seinen Nachfolger. Ich möchte jetzt das erste Element mit dem letzten Element der Liste tauschen, jedoch weiß ich keinen Lösungsansatz.
 
Zuletzt bearbeitet:

DrZoidberg

Top Contributor
Ich habe mir deinen Code nochmal genauer angesehen. Hatte das zuerst falsch verstanden. Ich dachte "kopf" verweist auf das erste Element, was aber nicht der Fall ist. Das erste Element der Liste ist das was nach Kopf kommt.
Daher ist dein Code soweit korrekt. Du brauchst ihn nicht zu ändern.
Um das erste und das letzte Element zu tauschen kannst du das hier machen.
Java:
public int laenge() {
    int l = 0;
    reset();
    while(!istAmEnde()) {
        vor();
        l++;
    }
    return l;
}

public void tauschen() {
    if(laenge() < 2) return;
    reset();
    Object a = getElement();
    loeschen();
    while(aktuell.nf.nf != null) vor();
    Object b = getElement();
    loeschen();
    einfuegen(a);
    reset();
    einfuegen(b);
}
 

orcale

Mitglied
Dann bin ich schon mal beruhigt das ich keinen Fehler habe. Ich danke dir auch dafür das du dir die Zeit genommen hast den Code nochmals durch zuschauen. Ich danke euch für eure Hilfe, wenn ich nochmals fragen habe, werde ich mich melden.


mit freundlichen Grüßen


Edit:

Ich habe gerade gesehen das man sich bedanken kann. Wie kann ich das machen?
 
Zuletzt bearbeitet:

DrZoidberg

Top Contributor
Ich habe gerade gesehen das man sich bedanken kann. Wie kann ich das machen?

Mit
post_thanks.gif
 

orcale

Mitglied
Ich brauche nochmals eure Hilfe. Jetzt wollte ich eine Methode in meiner Liste hinzufügen, die es möglich macht die Liste umzudrehen. Dafür habe ich folgende Methode geschrieben, aber "zerstöre" immer die Liste
Java:
	public void listeUmdrehen(){
		int i=0;
		Eintrag zeiger=kopf;
		// Aktuell geht bis erste Element dann 
if(i!=laenge()){
	while(zeiger.nf.nf!=null){
				vor();
			}
			while (aktuell.nf != null) {
				vor();
			}
			Object a = getElement();

			loeschen();
			zeiger.nf = null;
			einfuegen(a);
			reset();
			i++;
		}
	}
 

DrZoidberg

Top Contributor
Du könntest das z.B. so machen.

Java:
public void umdrehen() {
    if(kopf.nf == null) return;
    Eintrag letztes = kopf.nf;
    Eintrag aktuell = letztes.nf;
    letztes.nf = null;
    while(aktuell != null) {
        Eintrag naechstes = aktuell.nf;
        aktuell.nf = letztes;
        letztes = aktuell;
        aktuell = naechstes;
    }
    kopf.nf = letztes;
}
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Verkettete Liste Java Basics - Anfänger-Themen 1
H Java verkettete Liste, Wert eines Index zurückgeben Java Basics - Anfänger-Themen 1
Igig1 Autoparkplatz verkettete Liste erstes und letztes Auto Java Basics - Anfänger-Themen 13
R Rückgabe: verkettete Liste Java Basics - Anfänger-Themen 2
R einfach verkettete Liste Java Basics - Anfänger-Themen 1
R einfach verkettete Liste Java Basics - Anfänger-Themen 12
B Verkettete Liste durchgehen und einzelne Elemente in neue Liste tun Java Basics - Anfänger-Themen 9
B Bin komplett am verzweifeln :( Verkettete Liste die Objekte hat Attribut auslesen Java Basics - Anfänger-Themen 14
Y Einfügen in eine doppelt verkettete Liste Java Basics - Anfänger-Themen 8
A Doppelt verkettete Liste rückwärts ausgeben Java Basics - Anfänger-Themen 17
D Doppelt Verkettete Zirkular-Liste Java Basics - Anfänger-Themen 1
A Verkettete Liste Java Basics - Anfänger-Themen 2
B Doppelt verkettete Liste implementieren Java Basics - Anfänger-Themen 8
L verkettete Liste Java Basics - Anfänger-Themen 15
scratchy1 doppelt verkettete Liste testen Java Basics - Anfänger-Themen 8
R Methoden Entferne alle identische Knoten (Typ String) aus verkettete Liste Java Basics - Anfänger-Themen 8
C Methoden Über eine einfach verkettete Liste Java Basics - Anfänger-Themen 8
H Verkettete Liste Java Basics - Anfänger-Themen 7
N Verkettete liste rückwärts ausgeben Java Basics - Anfänger-Themen 18
K Verkettete Liste und seine Methoden Java Basics - Anfänger-Themen 1
N Verkettete Liste implementieren Java Basics - Anfänger-Themen 5
O Einfach verkettete Liste - Revert Methode Java Basics - Anfänger-Themen 1
G Verkettete Liste - Neu erzeugte Elemente werden nicht ausgegeben Java Basics - Anfänger-Themen 5
S Einfach verkettete Liste Element an bestimmter Position einfügen Java Basics - Anfänger-Themen 24
B Doppelt Verkettete Liste - Ist alles gut so? Java Basics - Anfänger-Themen 3
C Verkettete Liste - sortiert einfügen Java Basics - Anfänger-Themen 7
R Erste Schritte Verkettete Liste will einfach nicht in meinen Schädel Java Basics - Anfänger-Themen 11
U Datentypen Doppelt verkettete Liste implementieren Java Basics - Anfänger-Themen 13
J Methoden Doppelt verkettete Liste remove(Object) Java Basics - Anfänger-Themen 8
B OOP Über eine doppelt verkettete Liste iterieren Java Basics - Anfänger-Themen 4
hooked Verkettete Liste / linked list Java Basics - Anfänger-Themen 2
L Doppelt verkettete Liste Java Basics - Anfänger-Themen 6
J Eine Art verkettete Liste aber mit teils mehr als einem Nachfolger Java Basics - Anfänger-Themen 8
V Verkettete Liste rückwärts ausgeben Java Basics - Anfänger-Themen 3
R doppelt verkettete Liste aus Arrays erstellen Java Basics - Anfänger-Themen 1
K Einfach Verkettete Liste - addFirst() Java Basics - Anfänger-Themen 7
G 2 Aufgabe rund um eine verkettete Liste Java Basics - Anfänger-Themen 2
E Methoden auf von Methoden erstellte Objekte zugreifen (verkettete Liste) Java Basics - Anfänger-Themen 10
X Einfach verkettete Liste, keine Fehlermeldung Programm friert ein Java Basics - Anfänger-Themen 4
S Doppelt verkettete Liste Java Basics - Anfänger-Themen 3
G Doppelt Verkettete Liste Java Basics - Anfänger-Themen 2
A Doppelt Verkettete Liste Java Basics - Anfänger-Themen 16
E doppelt verkettete liste Java Basics - Anfänger-Themen 10
V Verkettete Liste. Java Basics - Anfänger-Themen 7
X Einfach Verkettete Liste Java Basics - Anfänger-Themen 16
K Verkettete Liste - Methode entwerfen Java Basics - Anfänger-Themen 14
S Verkettete Liste rückwärts ausgeben Java Basics - Anfänger-Themen 12
B Insertionsort verkettete Liste Java Basics - Anfänger-Themen 4
B Stack in eine verkettete Liste pushen Java Basics - Anfänger-Themen 4
R verkettete liste ansEndeSchieben Java Basics - Anfänger-Themen 13
T Verkettete Liste Java Basics - Anfänger-Themen 14
A Klassen Innere Klassen, verkettete Liste Java Basics - Anfänger-Themen 9
B Zweifach-verkettete Liste umkehren Java Basics - Anfänger-Themen 6
X verkettete Liste Java Basics - Anfänger-Themen 13
E Datentypen Doppelt verkettete Liste Java Basics - Anfänger-Themen 10
P Einfügen in doppelt verkettete Liste Java Basics - Anfänger-Themen 7
kae verkettete Liste Java Basics - Anfänger-Themen 5
S Queue als doppelt verkettete Liste Java Basics - Anfänger-Themen 2
S Stack als verkettete liste/ toString methode Java Basics - Anfänger-Themen 3
B OOP Verkettete Liste Java Basics - Anfänger-Themen 7
R verkettete liste Java Basics - Anfänger-Themen 5
M Verkettete Liste Java Basics - Anfänger-Themen 4
M verkettete liste Java Basics - Anfänger-Themen 7
N doppelt verkettete liste einfügen Java Basics - Anfänger-Themen 7
K Datentypen Einfach/Doppelt verkettete Liste Java Basics - Anfänger-Themen 4
N einfach verkettete liste fehler Java Basics - Anfänger-Themen 5
N einfach verkettete liste Java Basics - Anfänger-Themen 3
G verkettete Liste - invertieren Java Basics - Anfänger-Themen 2
B OOP Einfach verkettete Liste - rekursive Methoden Java Basics - Anfänger-Themen 1
B verkettete Liste Java Basics - Anfänger-Themen 8
S zyklisch verkettete Liste erstellen Java Basics - Anfänger-Themen 3
S einfach verkettete Liste Java Basics - Anfänger-Themen 19
O Stack Implementierung als verkettete Liste Java Basics - Anfänger-Themen 8
W Doppelt verkettete Liste implementieren Java Basics - Anfänger-Themen 2
T Einfach verkettete Liste: Wie Elemente löschen? Java Basics - Anfänger-Themen 4
J verkettete Liste Java Basics - Anfänger-Themen 2
D Einfach verkettete Liste Java Basics - Anfänger-Themen 20
DasDogma Verkettete Liste - Element löschen Java Basics - Anfänger-Themen 2
H Verkettete Liste Java Basics - Anfänger-Themen 5
M verkettete Liste auslesen Java Basics - Anfänger-Themen 7
K eigene verkettete Liste Java Basics - Anfänger-Themen 4
G Doppelt verkettete, generische Liste Java Basics - Anfänger-Themen 11
A Eine verkettete Liste Java Basics - Anfänger-Themen 43
G verkettete lineare Liste Java Basics - Anfänger-Themen 2
L verkettete Liste - Ausgabeproblem Java Basics - Anfänger-Themen 2
G Wie kann ich eine verkettete Liste in ein JTable einfügen? Java Basics - Anfänger-Themen 7
D doppelt verkettete Liste Java Basics - Anfänger-Themen 16
S Doppelt Verkettete Liste Java Basics - Anfänger-Themen 7
R ArrayList Objekt -> verkettete Liste Java Basics - Anfänger-Themen 4
R verkettete Liste Java Basics - Anfänger-Themen 13
R verkettete Liste in und aus Datei Java Basics - Anfänger-Themen 5
M Doppelt verkettete Liste Zeiger Vorgänger beim Einfügen Java Basics - Anfänger-Themen 2
J doppelt verkettete Liste Java Basics - Anfänger-Themen 5
L doppelt verkettete Liste Java Basics - Anfänger-Themen 6
C einfach verkettete Liste -> Elemente vertauschen Java Basics - Anfänger-Themen 2
0 Binärbaum als verkettete Liste Java Basics - Anfänger-Themen 3
B Doppelt verkettete Liste implementieren Java Basics - Anfänger-Themen 12
G Dopplelt verkettete liste Java Basics - Anfänger-Themen 4
B Doppelt verkettete Liste Java Basics - Anfänger-Themen 16
R einfach verkettete Liste, intersect Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben