Auf Thema antworten

Also, Du hast eine doppelt verkettete Liste:

[code]

null<->1<->2<->3<->4<->5<->6<->null

       ^                   ^

     first                last

[/code]

Nehmen wir mal an, es wird [icode]split(3)[/icode] ausgeführt. Wie Du das ja anfangs schon richtig hattest, suchst Du die 3 und speicherst die Referenz auf das Element in einer Variablen current. Hast Du das Element gefunden, ergibt sich folgendes Bild:

[code]

null<->1<->2<->3<->4<->5<->6<->null

       ^       ^           ^

     first  current       last

[/code]


Was muss jetzt passieren? Am Ende sollst Du zwei Listen haben, nämlich die aktuelle (this) und eine neue:


[code]

null<->1<->2<->null    null<->3<->4<->5<->6<->

       ^   ^                  ^           ^

     first last              first       last

        this                     newList

[/code]


Um das zu erreichen, musst Du ein paar Dinge tun. Wenn ich nichts übersehen habe:

[code]

1. altes Last sichern


newLast = last


2. aktuelle Liste ändern


this.last = current.previous

this.last.next = null


3. neue Liste einrichten


newList.last = newLast

newList.first = current

newList.first.previous = null

[/code]


Nun gibt es ein paar Sonderfälle, die man sich anschauen sollte.

  1. die aktuelle Liste ist vor dem Aufruf leer
  2. das gesuchte Element ist nicht in der Liste
  3. das erste Element der aktuellen Liste ist das gesuchte

Zu 1.: hier gibt man einfach eine leere Liste zurück

Zu 2.: auch hier reicht es, eine leere Liste zurückzugeben

Zu 3.: hier wird es interessant. Wenn das erste Element das gesuchte ist, dann gilt [icode]current.previous == null[/icode]. Im ersten Schritt unter Punkt 2 oben wird das letzte Element somit auf null gesetzt. Der zweite Schritt kann so aber nicht mehr ausgeführt werden. Stattdessen muss das erste Element auf null gesetzt werden ([icode]this.first = null;[/icode]).



Oben