Verkettete Liste durchgehen und einzelne Elemente in neue Liste tun

bindankbar

Mitglied
Hi, ich soll in einer Methode eine verkettete Liste durchgehen. Ich soll dabei prüfen, ob die Elemente mit einem Buchstaben anfangen, den ich vorher der Methode gebe. Wenn ja soll ich dieses Element in eine neue Liste tun und die Liste später zurückgeben.

Den Vergleich bekomme ich hin, also zu prüfen, ob das Element mit einem bestimmten Buchstaben anfängt. Aber in was für eine Liste kann ich die Elemente packen, ein Array geht nicht, da ich vorher nicht weiß wie viele Treffer ich habe und ich die Länge vorher nicht bestimmen kann oder?
Deshalb müsste ich es, da ich nur Arrays und verkettete Listen kennengelernt habe, es in eine verkettete Liste tun, denke ich mal, aber wie sieht sowas aus? Wie mache ich in einer Methode eine verkette Liste und füge da immer ein bestimmtes Element hinzu. Und welchen Datentyp muss ich der Methode geben, damit man eine ganze Liste zurück geben kann?
 
Die Methode benötigt als Rückgabe nur List. List ist ein Interface, das Methodensignaturen für alle von einer List bereitgestellten Funktionen vereinbart. Somit wirst du unabhängig von einer konkreten Art von Liste.
Java:
    List<String> list = filerList(Arrays.asList("aa", "ba", "!a"), "a");



    private static List<String> filerList(List<String> list, String filter) {
        List<String> filtered = new ArrayList<>(); //new LinkedList<>();
      
        // add matches from list to filtered list
      
        return filtered;
    }
 
Deshalb müsste ich es, da ich nur Arrays und verkettete Listen kennengelernt habe, es in eine verkettete Liste tun
Ich würde raten, dass du damit Recht hast, dass du eine neue verkettete Liste (analog zu der, die du durchsuchen sollst) erstellen sollst.

Wie kommen denn die Elemente in die bestehende (verkettete) Liste?

Handelt es sich um die von Java bereitgestellte LinkedList, oder um eine selbst programmierte Klasse?

Dann schau, ob die passende Methoden hat, um ein Element hinzuzufügen.

Und welchen Datentyp muss ich der Methode geben, damit man eine ganze Liste zurück geben kann?
Falls es sich um eine selbst erstellte verkettete Liste (Klasse) handelt, dann entspricht der Datentyp genau dieser Listenklasse.
 
Zuletzt bearbeitet:
Ich vermute, dass es eine eigens implementierte LinkedList ist, die ihr verwendet und wenn es eine entsprechende Übung zu abstrakten Datentypen geht, dann wäre die Übung an dieser Stelle, dass Du Dir das erst einmal aufmalst: Wie genau sieht die LinkedListe aus, die Du derzeit hat und was genau soll das Resultat sein?

Falls ihr gewisse Funktionen schon habt, dann ist Funktionalität übernehmbar. Das Löschen eines Elements wird vom Prinzip her genau das sein, was DU brauchst, um ein Element aus der Liste heraus zu nehmen. Das Einfügen eines Elements wird genau das machen, was Du brauchst, um ein Element einzufügen.

Daher ist aber halt zwingend notwendig, dass die Klasse LinkedList, die Ihr habt, komplett verstanden wurde. Das ist eine existenzielle Basis und jede Erklärung kann nur dann zielführend sein, wenn diese Basis vorhanden ist.

Wenn ja soll ich dieses Element in eine neue Liste tun und die Liste später zurückgeben
Und welchen Datentyp muss ich der Methode geben, damit man eine ganze Liste zurück geben kann?
Da ihr ja vermutlich nur eure eigene LinkedList habt, ist auch das genau der Datentyp, den ihr verwenden sollt / müsst. Es geht ja gerade darum, euer Wissen zu diesem Datentyp zu vertiefen.

Und da ist es dann vermutlich so, dass ihr gewisse Grundlagen schon haben werdet (wie @temi schon sagte): Ihr werdet ja schon LinkedLists angelegt und mit Elementen gefüllt haben. Irgend welche Operationen werdet Ihr schon haben. Und daher bin ich sehr sicher, Du Du prinzipiell schon Code hast, um eine Liste zu erzeugen und da Elemente hinzu zu fügen. (Wie hättest Du sonst im anderen Thread etwas machen können?)

Daher wären zwei Punkte ganz wichtig:
a) Bei Fragen brauchen wir Details. Du lieferst uns keinerlei Details, so dass wir konkrete Aussagen nicht treffen können.
b) Die Grundlagen sind wichtig. Deine Probleme rühren aus meiner Sicht daher, dass Du die Grundlagen, die ihr vorher gehabt haben müsst, nicht verstanden hast. Die LinkedList, die vorgegeben wurde, ist nicht (komplett) verstanden. Diese Grundlage ist aber zwingend notwendig!

Bezüglich der Grundlagen: LinkedList kann man sich sehr gut bildlich vorstellen. Ein Bild, das ich in der Vergangenheit verwendet habe, ist das Bild eines Zuges. Die Züge sind aber leider noch nicht wirklich modern - zum Koppeln dienen einfach Seile. Diese sind an einem Ende sichtbar und werden so am anderen Ende befestigt, dass das andere Ende da keinen Zugriff drauf hat (Sozusagen unterhalb des Waggons.)

LinkedList hat dann eine Referenz auf einen ersten Knoten, genannt "head":
head ist dann die Lok. An der Lok hinten ist ein ein Seil befestigt. Am Seil kann ein Waggon hängen oder auch nicht (null)
Waggon sind dann die Nodes. Die haben also eine Ladung (value, data, wie auch immer). Vorne ist unterhalb des Waggons eine Möglichkeit, etwas zu befestigen. Da kann kein, ein oder sogar mehrere Seile befestigt werden. Das kann man aber vom Waggon aus nicht sehen! Und hintern ist wieder ein Seil. An dem kann ein Waggon hängen oder auch keiner.

Nun kann man sich alle möglichen Dinge vorstellen.
- Prüfen, ob die Liste leer ist. Das wäre ein Zug, an dem keine Waggons hängen. ==> Also bei der Lok schauen, ob da am Sel ein Waggon hängt oder nicht.
- Ein Waggon hinten dran hängen: Ich gehe von der Lok aus so lange immer von Waggon zu Waggon, bis ich ein Seil habe, an dem kein Waggon dran hängt. Da hänge ich dann einen Waggon an.
- Ein Waggon dazwischen hängen: Ist dann auch ganz einfach visuell vorstellbar. Ich löse an der Stelle, wo der Waggon hin soll, das Seil und binde das Seil vom neuen Waggon dort an. Das gelöste Seil binde ich dann an den Waggon, der dazwischen kommen soll.
- ...

Das ist dann bildlich vorstellbar und so auch schnell verständlich. Zur Not könnte man dies sogar mit einer Holzeisenbahn für paar Euro durchspielen.
 
Ich vermute, dass es eine eigens implementierte LinkedList ist, die ihr verwendet und wenn es eine entsprechende Übung zu abstrakten Datentypen geht, dann wäre die Übung an dieser Stelle, dass Du Dir das erst einmal aufmalst: Wie genau sieht die LinkedListe aus, die Du derzeit hat und was genau soll das Resultat sein?

Falls ihr gewisse Funktionen schon habt, dann ist Funktionalität übernehmbar. Das Löschen eines Elements wird vom Prinzip her genau das sein, was DU brauchst, um ein Element aus der Liste heraus zu nehmen. Das Einfügen eines Elements wird genau das machen, was Du brauchst, um ein Element einzufügen.

Daher ist aber halt zwingend notwendig, dass die Klasse LinkedList, die Ihr habt, komplett verstanden wurde. Das ist eine existenzielle Basis und jede Erklärung kann nur dann zielführend sein, wenn diese Basis vorhanden ist.



Da ihr ja vermutlich nur eure eigene LinkedList habt, ist auch das genau der Datentyp, den ihr verwenden sollt / müsst. Es geht ja gerade darum, euer Wissen zu diesem Datentyp zu vertiefen.

Und da ist es dann vermutlich so, dass ihr gewisse Grundlagen schon haben werdet (wie @temi schon sagte): Ihr werdet ja schon LinkedLists angelegt und mit Elementen gefüllt haben. Irgend welche Operationen werdet Ihr schon haben. Und daher bin ich sehr sicher, Du Du prinzipiell schon Code hast, um eine Liste zu erzeugen und da Elemente hinzu zu fügen. (Wie hättest Du sonst im anderen Thread etwas machen können?)

Daher wären zwei Punkte ganz wichtig:
a) Bei Fragen brauchen wir Details. Du lieferst uns keinerlei Details, so dass wir konkrete Aussagen nicht treffen können.
b) Die Grundlagen sind wichtig. Deine Probleme rühren aus meiner Sicht daher, dass Du die Grundlagen, die ihr vorher gehabt haben müsst, nicht verstanden hast. Die LinkedList, die vorgegeben wurde, ist nicht (komplett) verstanden. Diese Grundlage ist aber zwingend notwendig!

Bezüglich der Grundlagen: LinkedList kann man sich sehr gut bildlich vorstellen. Ein Bild, das ich in der Vergangenheit verwendet habe, ist das Bild eines Zuges. Die Züge sind aber leider noch nicht wirklich modern - zum Koppeln dienen einfach Seile. Diese sind an einem Ende sichtbar und werden so am anderen Ende befestigt, dass das andere Ende da keinen Zugriff drauf hat (Sozusagen unterhalb des Waggons.)

LinkedList hat dann eine Referenz auf einen ersten Knoten, genannt "head":
head ist dann die Lok. An der Lok hinten ist ein ein Seil befestigt. Am Seil kann ein Waggon hängen oder auch nicht (null)
Waggon sind dann die Nodes. Die haben also eine Ladung (value, data, wie auch immer). Vorne ist unterhalb des Waggons eine Möglichkeit, etwas zu befestigen. Da kann kein, ein oder sogar mehrere Seile befestigt werden. Das kann man aber vom Waggon aus nicht sehen! Und hintern ist wieder ein Seil. An dem kann ein Waggon hängen oder auch keiner.

Nun kann man sich alle möglichen Dinge vorstellen.
- Prüfen, ob die Liste leer ist. Das wäre ein Zug, an dem keine Waggons hängen. ==> Also bei der Lok schauen, ob da am Sel ein Waggon hängt oder nicht.
- Ein Waggon hinten dran hängen: Ich gehe von der Lok aus so lange immer von Waggon zu Waggon, bis ich ein Seil habe, an dem kein Waggon dran hängt. Da hänge ich dann einen Waggon an.
- Ein Waggon dazwischen hängen: Ist dann auch ganz einfach visuell vorstellbar. Ich löse an der Stelle, wo der Waggon hin soll, das Seil und binde das Seil vom neuen Waggon dort an. Das gelöste Seil binde ich dann an den Waggon, der dazwischen kommen soll.
- ...

Das ist dann bildlich vorstellbar und so auch schnell verständlich. Zur Not könnte man dies sogar mit einer Holzeisenbahn für paar Euro durchspielen.
Ja wir haben eine eine selbst erzeugte linkedlist. Und wir haben auch alle Referenzen etc.

Darf leider keinen Code von der Aufgabe posten, unsere Lehrer meint, man darf sich Hilfe suchen, aber seinen Code will er nicht im Internet sehen, damit er es auch Jahre weiter verwenden kann als Übung.

Sorry ich habe die Frage bisschen falsch formuliert, bin mit den Fachwörtern echt sehr schlecht sorry 🙁. Also der Datentyp ist der Name der Klasse, in der die linkedlist manuell erstellt wurde, das weiß ich. Aber was gebe ich bei Return an, gebe ich da wieder den Namen der Klasse an, also z. B. return Klassenname;? Weil dann gebe ich ja da einfach einen Datentyp an und sogar den gleichen, wie ich der Methdoe gegeben habe, wo das return ausgeführt wird. Das kanns nciht sein oder?
 
Zuletzt bearbeitet:
Wenn Du eine LinkedList mit Elementen zurückgeben sollst, dann musst Du in der Methode eine neue LinkedList erzeugen, da dann die Elemente hinzu fügen und dann am Ende die LinkedList zurück geben.
 
Wenn Du eine LinkedList mit Elementen zurückgeben sollst, dann musst Du in der Methode eine neue LinkedList erzeugen, da dann die Elemente hinzu fügen und dann am Ende die LinkedList zurück geben.
Danke hat funktioniert, aber kann irgendwie nicht markieren, dass das Thema sich erledigt hat, in dem ich dir eine grüne Antwort gebe oder wie das heißt, also das was ich das letzte Mal gemacht habe
 
Das ist ok. Es liegt daran, dass Du letztes Mal eine Frage gestellt hast (--> Darauf gibt es dann Antworten) und hier hast Du eine Diskussion gestartet (--> Keine Antworten).
 

Zurück
Oben