Eigene LinkedList und Nodes

Status
Nicht offen für weitere Antworten.

mamelinchen

Bekanntes Mitglied
Ziel ist es, eine LinkedList selber zu schreiben.
Am Anfang existieren nur der Node head und der Node tail.
Head zeigt nur auf den nächsten Node, ohne Objekt, Node auf Objekt und nextNode.
Tail soll am Ende wieder auf den head zeigen.

Wie ich es dann recht verstehe sind die Instanzvariablen von LinkedList dann
Code:
public  class LinkedList extends List{
protected Node head;          
protected Node tail;

...Node(Node next,Objekt objekt){ //Node-Klasse in LinkedList mit Iv,Konst
...
}

}
Was ist mit einem Index?
Ist er auch eine Instanzvariable von LinkedList?
Oder soll ich den weglassen?
Woher soll ich dann wissen wo dann mein neues Objekt in der Liste hinmuss ohne Index?

Bin bissl verwirrt und unsicher...:bahnhof:

will ja nicht gleich Fehler am Anfang machen und dann damit weiterarbeiten.:autsch:
 

diggaa1984

Top Contributor
also add .. hängt die elemente einfach stumpf vor den tail und biegt alle nötigen anderen referenzen um. Wenn du nun nen insert durchführen willst, dann musst du dich vom 1. element bis zum jeweiligen betroffenen durchhangeln und da dann alle referenzen umbiegen. Ob du da bei 0 oder 1 anfängst mit zählen spielt an sich keine rolle, aber 0 wäre intuitiver für mich :D
 

0x7F800000

Top Contributor
Am Anfang existieren nur der Node head und der Node tail.
Am Anfang würde ich head und tail auf ein und denselben dummy-knoten zeigen lassen.

Tail soll am Ende wieder auf den head zeigen.
wozu das? Für eine unnötige extra Abfrage bei hasNext()?

Was ist mit einem Index?
Was für ein Index? Verkettete Listen erlauben kein random access. Ein Element mit einem bestimmten Index aufzusuchen ist bei verketteten Listen eine unverhältnismäßig teuere Angelegenheit [ O(n) statt O(1) wie bei Arrays bzw ArrayList bzw Vector ]

Woher soll ich dann wissen wo dann mein neues Objekt in der Liste hinmuss ohne Index?
einfach ans ende dranhängen, dazu ist tail ja da...

will ja nicht gleich Fehler am Anfang machen und dann damit weiterarbeiten.:autsch:
Dieses unangenehme Gefühl sollte man sich nicht angewöhnen. Sieh es ganz locker, sag dir: "das ist ein schmierblatt, und ich habe fest vor, den code größtenteils wegzuschmeißen" und schreib dann einfach los, ohne großartig gedanken zu machen. Wenn's nicht klappt, dann schmeißt du es eben weg, und fängst mit den eben gesammelten erfahrungen neu an. Besser als ewig rumzusitzen, und sich die theoretisch optimale Lösung herzuleiten... Bei kleinen Sachen macht's ja nichts aus.
 

diggaa1984

Top Contributor
zwischenfrage: ist das eine Einfach-verkettete Liste oder doppelt?

Würde bei einfach-verketteten der Tail.next auf das letzte Element zeigen? Wäre ja quasi n rückwärtsschritt. Bei doppelt gäbs ja dafür den .previous-Part
 

0x7F800000

Top Contributor
Würde bei einfach-verketteten der Tail.next auf das letzte Element zeigen?
dann wäre tail sowas wie das vorletzte element oder wie? Ne, das ist irgendwie schräg ???:L
bei doppelt verketteten Listen würde ich aus symmetriegründen wohl zwei dummy Nodes an den anfang und ans ende dranhängen. Eigentlich ist es vollkommen egal, hauptsache man kommt nicht durcheinander...
 

diggaa1984

Top Contributor
jo bei doppelt is klar, aber bei einfach, müsste man ja dann sogar beim add immer komplett über die liste rennen, macht ja auch kein sinn :D .. das könnte man mit tail.next ein wenig umgehen auch wenns nicht ganz in die vorstellung passt.

aus eben diesem grund stellte sich mir grad die frage ;)
 

0x7F800000

Top Contributor
jo bei doppelt is klar, aber bei einfach, müsste man ja dann sogar beim add immer komplett über die liste rennen, macht ja auch kein sinn :D .. das könnte man mit tail.next ein wenig umgehen auch wenns nicht ganz in die vorstellung passt.
Wieso? In tail speichere man einfach das letzte vorhandene Element. Bei append macht man einfach nur:
Java:
append(T value){
   tail.next=(tail=new Node(value));
}
 

diggaa1984

Top Contributor
Zitat von diggaa1984
Würde bei einfach-verketteten der Tail.next auf das letzte Element zeigen?

dann wäre tail sowas wie das vorletzte element oder wie? Ne, das ist irgendwie schräg
aber bei einfach, müsste man ja dann sogar beim add immer komplett über die liste rennen
Wieso? In tail speichere man einfach das letzte vorhandene Element

ein innerer konflikt!? liest sich so widersprüchlich :bahnhof::lol:

Java:
append(T value){
   tail.next=(tail=new Node(value));
}

//wenn dann so, sonst kommst vom head nich hin :D
append(T value){
   Node n = new Node(value);
   tail.next.next = n;
   tail.next= n;
}
2-zeichen-text-damit-ich-das-posten-kann-da-der-das-da-oben-im-quote-nicht-erkennen-kann :D
 

0x7F800000

Top Contributor
äääh, was? :autsch:
"tail speichere man einfach das letzte vorhandene Element"
noch besser man nennt es "last". Was davon hört sich widersprüchlich an? ???:L
 

0x7F800000

Top Contributor
Verstehe ich immer noch nicht, sorry zuviel crack im hirn... :autsch:?

Zwischen dem letzten und dem vorletzten element besteht imho schon ein nicht vernachlässigbarer inhaltlicher unterschied. Wozu zugriffe wie
tail.next.next
gut sein sollen, fällt mir spontan auch nicht ein. :bahnhof:
 

diggaa1984

Top Contributor
ach jetzt versteh ich dich .. bei mir is tail schon immer n Dummy-Node gewesen, der keine info enthält. Bei dir ist tail eben, das letzte gültige Element der Liste. Jeder wie ers gewohnt ist :oops:
 

mamelinchen

Bekanntes Mitglied
Also von doppelt verketteter Liste ist wohl nicht die Rede...

Klasse LinkedList,die das Interface List(von mir ohne java.util) als einfach verkettete und nicht zirkuläre Liste implementiert.


Originalsatz:
Der Hilfsknoten tail soll die Invariante tail.next==tail zum Abschluss (und damit auch bei Beginn) aller Methoden erfüllen.

Wie bekomme ich dann zB

public Person get(int i)?
 

faetzminator

Gesperrter Benutzer
als pseudo code:
Code:
get(int i) {
    if (i < 0) {
        throw new IndexOutOfBoundsException();
    }
    Node node = this.getStartNode();
    while (i-- > 0) {
        if (node.isTail()) {
            throw new IndexOutOfBoundsException();
        }
        node = node.getNext();
    }
    return node;
}
 

mamelinchen

Bekanntes Mitglied
Ick kanns die Objekte nicht ans Ende hängen...ich habe Methoden vorbekommen wie:

void insert(int i,Object object)
remove(int i)

Ich soll sie genau an diese Stellen setzen..
oder an der stelle löschen :/

wie soll ich das machen?

Hilfsknoten head am Anfang und tail am Ende.
Zeigt dann head auf tail?und tail auf sich selbst.Am Anfang?Ist die LinkedList am Anfang leer?
Wie soll ich das initialisieren?
Ich brauche dann 2 Konstruktoren?

Code:
public Node (Person person){
                this.next=null;
                this.person=person;
            }

und der andere dummy für head und tail?
head und tail haben doch keine referenz auf ein objekt mehr....
sie zeigen doch nur auf die knoten selbst.

Code:
public Node (){
                this.next=null;
            }

Wo sage ich denn auf was der Node zeigt?

hab viel gelesen und bin immernoch verwirrt???:L
 
S

SlaterB

Gast
denken und selbst entscheiden, das sind die Regeln, nichts ist in Stein gemeißelt,
erlaubt ist was funktioniert,

head und tail könnten anfangs null sein,
beim ersten Element ist next null, head und tail zeigen auf dieses neue Element,

kommt dann ein neues hinzu, dann entweder auf Position 0 oder 1,
je nachdem muss entweder head oder tail neu gesetzt werden
(Code wie if (position == 0) ist doch nicht schwer?)

außerdem muss entweder next des neuen Nodes auf den einzigen alten zeigen oder umgekehrt

das muss nicht alles in einer Zeile passieren, verwende neben Konstruktoren auch getNext() und setNext()
nach und nach einzelne Schritte bis am Ende alle Referenzen stimmen
 

mamelinchen

Bekanntes Mitglied
Ick bin mir net sicher , ick habs jetzt so gemacht, dafür das ick es überhaupt net raffe...

ich hoffe ihr wisst , was ick damit erreichen will^^
Und ick bin mir sicher das ick irgend n Mist gebaut habe, bloss ick wees net wo!

Code:
    public void insert(int i, AbstractPerson person) {
        if (i<0){
             throw new IndexOutOfBoundsException();
        }
        else if (i==0){
            head = new Node(person, head.next);
            }
        else{
            Node f;
            int stelle= 0;
            for(f=head.next;f==tail;f=f.next)
                stelle++;
            if(stelle>i){
                Node g=new Node(person,f.next);
                g.next=f;
            }
            
            tail = new Node(person, tail);
        }
    }
 

mamelinchen

Bekanntes Mitglied
Code:
  tail = new Node(person, tail);

dis is quatsch, sorry!


denken und selbst entscheiden, das sind die Regeln, nichts ist in Stein gemeißelt,
erlaubt ist was funktioniert,

das sag ma meenem dozenten....
 

mamelinchen

Bekanntes Mitglied
???:L

Ich wollte nur fragen ob meine Methode insert funktioniert!

Ich hangel mich wie ein Affe von Knoten zu Knoten, ein Zähler zählt mit, und wenn dieser kleiner i ist, dann setze ich ein^^
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Eigene LinkedList Klasse Java Basics - Anfänger-Themen 4
F Eigene LinkedList - toString Java Basics - Anfänger-Themen 10
Amina556 Eigene Klasse definieren Java Basics - Anfänger-Themen 9
T Eigene Exception - ohne werfen abfangen Java Basics - Anfänger-Themen 2
T Datentypen Eigene Datentypen Java Basics - Anfänger-Themen 15
low_in_the_head Eigene Exception nutzen Java Basics - Anfänger-Themen 4
C Archiv für eigene Klassen Java Basics - Anfänger-Themen 9
L Meine erste eigene Exception Klasse Java Basics - Anfänger-Themen 10
D Attribut Telefonnummer - eigene Klasse oder String Java Basics - Anfänger-Themen 13
B JUnit 4: Wie man die eigene Liste testen kann [TDD] Java Basics - Anfänger-Themen 46
C eigene Methoden erstellen (Instanzmethoden) Java Basics - Anfänger-Themen 7
I Eigene Java Tools Nutzung Java Basics - Anfänger-Themen 6
G eigene Bibliothek einbinden Java Basics - Anfänger-Themen 1
K Eigene Annotations, Pre-/Post-/Call-Method Java Basics - Anfänger-Themen 6
O Erste Schritte Eigene charAt(i) Methode schreiben Java Basics - Anfänger-Themen 10
D Methoden Eigene Methode um alle Ausgaben aufzurufen Java Basics - Anfänger-Themen 17
L Eigene Exception schreiben bei zu langem Array Java Basics - Anfänger-Themen 10
P Maven und eigene Jars Java Basics - Anfänger-Themen 4
J Algorithmus - Strings auf eigene Reihenfolge miteinander vergleichen Java Basics - Anfänger-Themen 4
R Interface Eigene Objekte in Listen sortieren mit Interface Comparable Java Basics - Anfänger-Themen 5
A Eigene Methoden entwicken Java Basics - Anfänger-Themen 3
F Klassen Eigene Exception Bedingungen festlegen Java Basics - Anfänger-Themen 2
H GSON-Bibliothek für eigene Programme benutzen Java Basics - Anfänger-Themen 2
H Klassen auf eigene Klasse zugreifen Java Basics - Anfänger-Themen 2
N Eclipse - eigene Icons unter ClassPath Resource Java Basics - Anfänger-Themen 0
N Eigene Stream Methoden implementieren Java Basics - Anfänger-Themen 3
R eigene Graphikbedienelemente Java Basics - Anfänger-Themen 8
V Generics / eigene Liste Java Basics - Anfänger-Themen 4
T Eigene Bedingung in IF-Bedingung Java Basics - Anfänger-Themen 22
P Java 8 & Eigene Applets Java Basics - Anfänger-Themen 3
E Best Practice Exaktes Rechnen mit (Pseudo-)Rationalen/Realen Zahlen. Operations Zuweisung für (eigene) Klassen Java Basics - Anfänger-Themen 3
G eigene Bibliothek in Java importieren Java Basics - Anfänger-Themen 5
D Klassen Eigene Klasse für ArrayList Java Basics - Anfänger-Themen 6
M Wann eigene implementierte HashCode Methode zwingend erforderlich? Java Basics - Anfänger-Themen 1
B Klassen Eigene "non static" Klasse in Main verwenden! Java Basics - Anfänger-Themen 12
P Vererbung Eigene HashMap Variante Java Basics - Anfänger-Themen 2
J Eigene Klasse für die Variablen? Java Basics - Anfänger-Themen 3
P Eigene Knöpfe mit eigenem Listener Java Basics - Anfänger-Themen 5
S Wann existiert eine Instanz (eigene Klasse) Java Basics - Anfänger-Themen 8
T Muss ein Parametertest immer eine eigene Testklasse sein? Java Basics - Anfänger-Themen 3
B Multithreading und eigene Queue entwickeln Java Basics - Anfänger-Themen 3
O GUI: Eigene Fenster "Form"? Java Basics - Anfänger-Themen 13
O Denkanstöße für eigene Konfigurations-Datei Java Basics - Anfänger-Themen 12
SexyPenny90 Wieso ist diese eigene Equals-Methode schlecht? Java Basics - Anfänger-Themen 17
C eigene Exception Java Basics - Anfänger-Themen 4
M externe JARs in die eigene JAR einbinden Java Basics - Anfänger-Themen 9
V Klassen import - einfaches Umleiten auf eigene Klassen? Java Basics - Anfänger-Themen 8
S Eigene Exception Klasse - fehlender Konstruktor mit String Java Basics - Anfänger-Themen 3
B eigene klasse in listen eintragen Java Basics - Anfänger-Themen 6
A Objekte in eigene Klasse auslagern Java Basics - Anfänger-Themen 2
S [JavaFX 2.1] - Eigene Sprachauswahl? Java Basics - Anfänger-Themen 4
K Klassen Eigene Exception verwenden Java Basics - Anfänger-Themen 9
J eigene packages bzw klassen verwenden Java Basics - Anfänger-Themen 25
E Eigene Stackklasse Java Basics - Anfänger-Themen 7
B Eigene Exceptions entwerfen Java Basics - Anfänger-Themen 3
S Eigene Exception Schreiben und Welche Auslösen wie ? Java Basics - Anfänger-Themen 7
P eigene kleine Datenverwaltung Java Basics - Anfänger-Themen 5
N Eigene Methoden-> Werte übergeben Java Basics - Anfänger-Themen 5
U Klassen Eigene Klassen importieren Java Basics - Anfänger-Themen 13
Kenan89 ActionListener in eigene Klasse Java Basics - Anfänger-Themen 8
E Object in eigene Klasse umwandeln? Java Basics - Anfänger-Themen 7
S Eigene Klassen addieren Java Basics - Anfänger-Themen 3
B OOP Eigene Objekte in Arrays zusammenfassen Java Basics - Anfänger-Themen 3
E Eigene class datum Java Basics - Anfänger-Themen 2
G Eigene MessageBox kreieren Java Basics - Anfänger-Themen 9
I Erste Schritte Eigene Fehlermeldungen bei Exceptions Java Basics - Anfänger-Themen 19
F Klassen Eigene Klasse definieren Java Basics - Anfänger-Themen 4
S Eigene KeyEvent-Mask erstellen Java Basics - Anfänger-Themen 4
X Eigene Libary Java Basics - Anfänger-Themen 2
Crashbreaker Eigene Java-Programm ohne hilfe des CMD starten Java Basics - Anfänger-Themen 11
A Klassen Eigene Datenklasse - Strings mit fixer Länge Java Basics - Anfänger-Themen 2
T eigene Exception Klasse Java Basics - Anfänger-Themen 12
G Shape um eigene Achse drehen Java Basics - Anfänger-Themen 2
P Vererbung Basisklasse soll eigene Methode benutzen Java Basics - Anfänger-Themen 38
F Eigene Klasse für die Keys von HashMap Java Basics - Anfänger-Themen 5
J Eigene kleine Datenbank programmieren Java Basics - Anfänger-Themen 2
G Eigene Klasse als Array, zugriff? Java Basics - Anfänger-Themen 2
xehpuk Ordner "Eigene Bilder" ansteuern Java Basics - Anfänger-Themen 3
V Sonderzeichen als eigene "Operatoren" im JTextField Java Basics - Anfänger-Themen 4
S Eigene Stack Klasse Java Basics - Anfänger-Themen 26
D Eigene equals methode schreiben Java Basics - Anfänger-Themen 4
dataframe OOP Eigene typisierte Liste Java Basics - Anfänger-Themen 3
W GUI als eigene Klasse oder in die Startklasse? Java Basics - Anfänger-Themen 21
T Konstruktor für eigene Klasse erstellen Java Basics - Anfänger-Themen 6
H Buttonbefehle in eigene Klasse schreiben Java Basics - Anfänger-Themen 8
M Datentypen Eigene iterierbare Liste Java Basics - Anfänger-Themen 4
G Eigene Klasse für externe Befehle - Warten auf Prozesse Java Basics - Anfänger-Themen 6
S Klassendiagramm - nur eigene Klassen? Java Basics - Anfänger-Themen 3
nrg Eigene simple List-Klasse programmieren Java Basics - Anfänger-Themen 3
C Eigene Interpreter-Programmiersprache mit Java Java Basics - Anfänger-Themen 17
B eigene Exception.... Java Basics - Anfänger-Themen 5
N Java Programm soll Datei in eigene jar schreiben Java Basics - Anfänger-Themen 13
F Eigene Exception StackTrace und Message ist leer warum??? Java Basics - Anfänger-Themen 3
M Eigene Pakete in Eclipse erstellen Java Basics - Anfänger-Themen 5
M Eigene Hash Funktion Java Basics - Anfänger-Themen 5
O Eigene Exceptions Java Basics - Anfänger-Themen 11
H eigene Schriftarten registrieren Java Basics - Anfänger-Themen 5
Kasoki Eigene Funktionen / Commands Java Basics - Anfänger-Themen 14
S eigene Methoden in JDialog Java Basics - Anfänger-Themen 13
K eigene Hash-Datenstruktur Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben