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.
- die aktuelle Liste ist vor dem Aufruf leer
- das gesuchte Element ist nicht in der Liste
- 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]).