Hallo,
ich habe die Aufgabe bekommen: Ich soll eine Klasse DLinkedList<T> erstellen die alle Methoden der abstrakten Klasse List<T> mit einer doppelt verketten Liste implementiert. So weit so gut, das alles war keine Problem nun zu meiner Frage:
Weiterhin sollen die Operation (zB. einfügen eines neuen Elements in die Liste an bestimmte Position) gegebenenfalls vom Ende der Liste aus laufen, wenn dies günstiger ist.
Ich weiß wie ich ein neues Element vom Ende der Liste aus einfüge, das funktioniert auch wunderbar. Nur habe ich die Frage wie prüfe ich vorher ob vom Beginn oder vom Ende aus eingefügt werden soll.
Ich habe eine Variable die die Anzahl der Elemente in der Liste hochzählt, kann ich daraus einfach den Mittelwert bilden und dann schauen ob die Einfügeposition größer ist ( also vom Ende aus einfügen) oder kleiner (also vom Anfang aus einfügen) außerdem ist das ja nur sinnvoll wenn ab 3 Elementen in der Liste, oder hat jemand ne einfacher oder bessere Idee? Ich steh gerade auf dem Schlauch...
Hier mein Code:
ich habe die Aufgabe bekommen: Ich soll eine Klasse DLinkedList<T> erstellen die alle Methoden der abstrakten Klasse List<T> mit einer doppelt verketten Liste implementiert. So weit so gut, das alles war keine Problem nun zu meiner Frage:
Weiterhin sollen die Operation (zB. einfügen eines neuen Elements in die Liste an bestimmte Position) gegebenenfalls vom Ende der Liste aus laufen, wenn dies günstiger ist.
Ich weiß wie ich ein neues Element vom Ende der Liste aus einfüge, das funktioniert auch wunderbar. Nur habe ich die Frage wie prüfe ich vorher ob vom Beginn oder vom Ende aus eingefügt werden soll.
Ich habe eine Variable die die Anzahl der Elemente in der Liste hochzählt, kann ich daraus einfach den Mittelwert bilden und dann schauen ob die Einfügeposition größer ist ( also vom Ende aus einfügen) oder kleiner (also vom Anfang aus einfügen) außerdem ist das ja nur sinnvoll wenn ab 3 Elementen in der Liste, oder hat jemand ne einfacher oder bessere Idee? Ich steh gerade auf dem Schlauch...
Hier mein Code:
Java:
public void add(int p, T x) {
Node t = new Node();
t.key = x;
Node current;
mitte = anzahl / 2;
if (anzahl < 3 || p <= mitte) {
System.out.println("Head");
current = head;
for (int i = 1; i < p; i++) {
current = current.next;
if (current == z) {
throw new RuntimeException("ungueltiger Index p");
}
}
t.next = current.next;
current.next.prev = t;
current.next = t;
t.prev = current;
} else {
System.out.println("Back");
current = z;
for (int i = anzahl; i > p; i--) {
current = current.prev;
if (current == head) {
throw new RuntimeException("ungueltiger Index p");
}
}
t.prev = current.prev;
t.next = current;
current.prev.next = t;
current.prev = t;
}
anzahl++;
}