DoublyLinkedList

Bitte aktiviere JavaScript!
Code:
public DoublyLinkedList<T> tail( int n )
    {    
        if ( size() > n )    
        {        
            DoublyLinkedList newList = new DoublyLinkedList<>();        
            Element<T> current = first;        
            int t = size() - n;        
            for ( int i = 0; i < t; i++ )        
            {
                current = current.getSucc();
            }
            newList.first = current;
            for(int i = 1; i<size; i++)
            {
                current = current.getSucc();
            }
            newList.last = current;
            newList.size = n;
            size = size- n;
            return newList;
        }
        else
        {
            throw new RuntimeException();
        }
Wo liegt der Fehler?
 
Zuletzt bearbeitet:
Der erste Fehler ist, dass Du uns keine Details über die DoublyLinkedList gegeben hast. Daher müssen wir teilweise raten.

Dann musst Du dir das einfach einmal aufmalen: Du hast eine doppelt verkettete Liste, die Du in zwei Listen teilen willst:
Was musst Du da alles umsetzen?
=> Du scheinst ja die Zeiger first und last zu haben. Auf was müssen die denn stehen?
=> Das letzte / erste Element der jeweiligen Liste: Muss da was angepasst werden?
 
Der erste Fehler ist, dass Du uns keine Details über die DoublyLinkedList gegeben hast. Daher müssen wir teilweise raten.

Dann musst Du dir das einfach einmal aufmalen: Du hast eine doppelt verkettete Liste, die Du in zwei Listen teilen willst:
Was musst Du da alles umsetzen?
=> Du scheinst ja die Zeiger first und last zu haben. Auf was müssen die denn stehen?
=> Das letzte / erste Element der jeweiligen Liste: Muss da was angepasst werden?
first der neuen Liste muss auf t = size -n stehen. Last auf size+n.
Muss ich da noch was voneinander abtrennen?
 
Die Elemente der neuen Liste, die Du zurück gibst, sollen aber doch aus der alten Liste entfernt werden.

Desweiteren sollte doch das letzte Element der alten Liste nicht mehr auf das erste Element der neuen Liste zeigen und umgekehrt.

So ist zumindest mein Verständnis der Aufgabe.
 
Die Elemente der neuen Liste, die Du zurück gibst, sollen aber doch aus der alten Liste entfernt werden.

Desweiteren sollte doch das letzte Element der alten Liste nicht mehr auf das erste Element der neuen Liste zeigen und umgekehrt.

So ist zumindest mein Verständnis der Aufgabe.
Wie genau entferne ich denn Elemente aus der Liste? Mache ich das nicht automatisch indem ich sage, dass size() = size() -n ist?
 
Wenn Du Probleme hast, dir alles Vorzustellen, dann mal es Dir wirklich auf! Dann siehst Du es direkt.

Also mal dir eine Liste mit 4 Elementen auf. Du hast also:
- die Liste mit den Referenzen first und last und der size.
- 4 Elemete mit jedes mal content (der hier jetzt egal ist), previous und next

Mal Referenzen als ein Pfeil. Also A4 hochkant nehmen. Oben in die Mitte der Zeile kommt eine kleine Kiste an die Du von mir aus "Liste" schreibst und in der Kiste sind dann size, first und last (also von mir aus in 3 Kästen unterteilt).

Dann mit etwas Abstand kommen dann 4 Kästchen nebeneinander. Jedes Kästchen ist in der Länge in 3 Kästchen unterteilt: previous, content und next.

Da kannst Du dann jetzt zum einen Pfeile machen und die size füllen.
Wenn Du das hast, dann kannst Du Dir überlegen, was sich ändern muss, wenn nun die letzten zwei Elemente in einer neuen Liste sein sollen und nicht mehr in der alten Liste. Das kannst Du dann mit einer anderen Farbe einzeichnen. Mit dem Bild wirst Du hoffentlich sehen, dass es deutlich mehr ist, als nur die size anzupassen.
 
Ich habe da mal eine Skizze gemacht, was ich meine. Was muss alles angepasst werden? (Content der einzelnen Elemente habe ich weggelassen und die beiden Pfeile zwischen next und prev sind nicht wirklich schön, aber es sollte alles zu erkennen sein.)
12227
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben