doppelt verkettete Liste

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • doppelt verkettete Liste

    Hi Leute!

    Ich will in einer doppelt verketteten Liste ein nachfolgendes Element löschen. Ich möchte z.B. hier den Knoten 2 löschen. Ich weiß, dass man da quasi Zeiger die auf den Knoten 2 zeigen umbeigen muss. Hab mir dazu auch schon eine Skize gemacht, aber in der Umsetzung geht's dann irgendwie nicht. Ich hab hier schon mal Code produziert, aber verstehe jetzt teilweise nicht mehr wie ich weitermachen soll. Könnt ihr mir vielleicht helfen?

    Quellcode

    1. #include<iostream>
    2. using namespace std;
    3. struct node
    4. {
    5. node* previous;
    6. int value;
    7. node* next;
    8. }
    9. void showList(node *nextElement, node *liste)
    10. {
    11. nextElement = liste;
    12. while(nextElement != NULL)
    13. {
    14. cout << nextElement->value << endl;
    15. nextElement = nextElement->next;
    16. }
    17. }
    18. void deleteAfter(node *list)
    19. {
    20. list->next->previous = list->previous;
    21. list->previous->next = list->next;
    22. return list->previous;
    23. }
    24. int main()
    25. {
    26. node *liste1, *liste2, *liste3, *liste4;
    27. node *nextElement = 0;
    28. liste1 = new node;
    29. liste1->value = 1;
    30. liste2 = new node;
    31. liste1->value = 2;
    32. liste3 = new node;
    33. liste3->value = 3;
    34. liste4 = new node;
    35. liste4->value = 4;
    36. liste1->next = liste2;
    37. liste2->next = liste3;
    38. liste3->next = liste4;
    39. liste4->next = NULL;
    40. deleteAfter(liste2);
    41. return 0;
    42. }
    Alles anzeigen
  • Danke, für deine Hilfe! Hab das return auch gleich mal rausgemacht. wenn ich jetzt kompiliere, dann sagt der Compiler, dass 'node' gefolgt von 'void' unzulässig ist. Und das alles spielt sich in der Zeile 14 Spalte 1 ab. Ich weiß da nicht so ganz was ich da jetzt anders machen soll... Ich will ja mit der Funktion showList() eigentlich nur die doppelt verkettete Liste ausgeben...

    Kannst du nochmal drüber gucken?
  • Erstmal: Mit Iteratoren usw. geht das einfacher. Finde es lustig das du mit this-Zeiger arbeitest, jedoch keine stärken in den eigens C++ implementierten Listen.
    Aber wer will, der will.

    Mich wundert es zuerst, dass überhaupt etwas ausgegeben wird.
    Deine "tolle" Funktion showList wird nämlich gar nicht aufgerufen! Oder wo siehst du hier einen Aufruf? Ich sehe nur die Funktion mit ihren normalen Parametern.
    Falls doch, aktualisiere deinen Code mal bitte. Also zeig in einem neuen Post uns deinen neuen veränderten Code.

    Wirklich ausgeben tut er ohne Kommas, da du keine drin hast.

    Ansonsten guck ich Morgen nochmal, ist jetzt erstmal wenig, weil ich etwas müde bin. '^^

    MfG
    Check
  • Sorry, da hab ich wohl etwas übereifrig geantwortet und dabei in der Tat vergessen meinen Code zu aktualisieren. Ausgeben tut er natürlich keine Kommas. Habe diese nur geschrieben, dass es übersichtlich bleibt. Ausgeben tut er genau das hier:

    "Windows-Konsolenfenster" schrieb:


    2
    -842150451
    3
    4
    Drücken sie eine beliebige Taste . . .



    Hier nochmal den Code:

    Quellcode

    1. #include<iostream>
    2. using namespace std;
    3. struct node
    4. {
    5. node* previous;
    6. int value;
    7. node* next;
    8. };
    9. void showList(node *nextElement, node *liste)
    10. {
    11. nextElement = liste;
    12. while(nextElement != NULL)
    13. {
    14. cout << nextElement->value << endl;
    15. nextElement = nextElement->next;
    16. }
    17. }
    18. void *deleteAfter(node *list)
    19. {
    20. list->next->previous = list->previous;
    21. list->previous->next = list->next;
    22. return list->previous;
    23. }
    24. int main()
    25. {
    26. node *liste1, *liste2, *liste3, *liste4;
    27. node *nextElement = 0;
    28. liste1 = new node;
    29. liste1->value = 1;
    30. liste2 = new node;
    31. liste1->value = 2;
    32. liste3 = new node;
    33. liste3->value = 3;
    34. liste4 = new node;
    35. liste4->value = 4;
    36. liste1->next = liste2;
    37. liste2->next = liste3;
    38. liste3->next = liste4;
    39. liste4->next = NULL;
    40. showList(nextElement, liste1);
    41. //deleteAfter(liste2);
    42. //showList(nextElement, liste1);
    43. return 0;
    44. }
    Alles anzeigen



    PS: Das ist eine Übungsaufgabe in der wir (anscheinend) den Umgang mit diesen this-Zeigern (ich denke du meinst '->' in meinem Code; ich wusste auch gar nicht das man die so nennt...) üben. Deswegen soll ich auch die Lösungen aus den Bibiliotheken nicht anwenden.

    Schon mal vielen Dank für deine Hilfe!