Hallo,
ich bin grade dabei eine doppelt verkettete lineare Liste zu implementieren: insert(), search() und die Ausgabe hauen schon hin, aber bei der delete()-Mathode bin ich so langsam am verzweifeln ???:L
Es funktioniert zwar für den Fall, dass das zu löschende Element an der ersten Stelle, bzw. in der Mitte steht, jedoch gibt er mir dann das letzte Element immer 2x aus?
PS: Der Fall, "Element steht am Ende" wird noch nicht abgefragt (wollte es erstmal so testen), es geht hier erstmal nur um den Fall "Element am Anfang" oder "Element irgendwo in der Mitte":
hier mein Code:
hab die search() rausgenommen, ist ja hier nicht wichtig
Danke schonmal im Voraus
ich bin grade dabei eine doppelt verkettete lineare Liste zu implementieren: insert(), search() und die Ausgabe hauen schon hin, aber bei der delete()-Mathode bin ich so langsam am verzweifeln ???:L
Es funktioniert zwar für den Fall, dass das zu löschende Element an der ersten Stelle, bzw. in der Mitte steht, jedoch gibt er mir dann das letzte Element immer 2x aus?
PS: Der Fall, "Element steht am Ende" wird noch nicht abgefragt (wollte es erstmal so testen), es geht hier erstmal nur um den Fall "Element am Anfang" oder "Element irgendwo in der Mitte":
hier mein Code:
Code:
public class CD_Archiv {
public class CD_Node {
String title;
String artist;
CD_Node prev; // vorheriges Element
CD_Node next; // naechstes Element
CD_Node(String titel, String interpret) {
this.title = titel;
this.artist = interpret;
}
}
CD_Node first; // erstes Element
CD_Node last; // letztes Element
int count = 0;
// neues Element (Knoten) am Anfang in die Liste einfuegen ----------------
void insert(String title, String artist) {
CD_Node cd = new CD_Node(title, artist); // Erzeugen eines neuen Knotens
// falls Liste leer
if (first == last) {
cd.prev = cd;
cd.next = last;
first = cd;
}
cd.next = first;
if (first != last) {
first.prev = cd;
first = cd;
cd.prev = last;
}
count++;
}
// --------------------------------------------------------------------------
// Element aus Liste loeschen -----------------------------------------------
void delete(String artist) {
CD_Node temp = first;
for (int i = 1; i <= count; i++){
if (artist.equals(temp.artist)) {
System.out.println(temp.artist);
//wenn temp nicht erstes Element...
if (temp.prev != last) {
(temp.prev).next = temp.next;
}
else {
//wenn temp erstes Element...
first = temp.next;
}
//wenn temp nicht vorletztes Element
if (temp.next != last) {
(temp.next).prev = temp.prev;
}
System.out.println(temp.artist);
}
temp = temp.next;
}
}
// Ausgabe der gesamten Liste (iterativ) ------------------------------------
void print_iterativ() {
CD_Node temp = first;
for (int i = 1; i <= count; i++) {
System.out.println("Nr." + i + " : " + temp.artist + " - " +temp.title);
temp = temp.next;
}
}
// --------------------------------------------------------------------------
public static void main (String[] args) {
CD_Archiv test = new CD_Archiv();
test.insert("Best Of", "Bon Jovi");
test.insert("Stadium Arcadium", "Red Hot Chili Peppers");
test.insert("Around the World", "R.E.M.");
test.print_iterativ();
// test.title_search("Bon Jovi");
test.delete("R.E.M.");
test.print_iterativ();
}
}
hab die search() rausgenommen, ist ja hier nicht wichtig
Danke schonmal im Voraus