verkette liste insert();

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

  • verkette liste insert();

    Hallo leute!

    Ich schreibe gerade an einer verkette liste das ganze funzt soweit auch ganz gut nur habe ich ein Problem mit meinem Insert:

    Also meine liste besteht aus zwei Struct :

    Quellcode

    1. struct element
    2. {
    3. int value;
    4. struct element *next;
    5. }
    6. struct list
    7. {
    8. struct element *first;
    9. struct element *last;
    10. }
    Alles anzeigen


    meine Insert funktion :

    Quellcode

    1. void einfügen(struct list *list, int val)
    2. {
    3. struct element *nele;
    4. struct list *list_itr = list;
    5. nele = malloc(sizeof(struct element);
    6. nele -> value = val;
    7. if (list_itr -> first == NULL)
    8. {
    9. list_itr->first = nele;
    10. list_itr->last = nele;
    11. nele -> next = NULL;
    12. }else
    13. {
    14. nele ->next = list_itr-last;
    15. list_itr->last = nele;
    16. }
    17. }
    Alles anzeigen


    Zu erklärung der insert ich schau einfach ob es schon ein erstes element gibt wenn nicht schreib ich das an die erste und an die letzte stelle der liste klar da die liste ja zu dem zeitpunkt nur aus einem Element besteht falls ein element vorhanden ist setze ich das neue einfach an die letzte stelle so nun zu meinem problem das ganze funktioniert nicht es wird mir immer nur das erste element ausgegeben.

    Aber wenn ich das ganze so schreibe:

    Quellcode

    1. else
    2. {
    3. nele ->next = list_itr-last;
    4. list_itr->first = nele;
    5. }

    also praktisch das neue element einfach an den anfang setze dann funktionier es ist aber in der umgekehrten reihenfolge also das zuletzt eingefügte element ist am anfang möchte es aber umgekehrt ich weiß aber nicht wo der Fehler liegt ?
    Die Logik sollte doch passen ? ich hoffe ihr könnt mir helfen

    Viele Grüße

    PS: nele steht für newelement... bin faul ;)

    EDIT:

    MIr ist gerade aufgefallen das bei 3 elementen immer das zuletzt eingefügte element überschrieben wird daher habe ich das ganze noch etwas umgeschrieben:

    Quellcode

    1. else
    2. {
    3. temp = list->first;
    4. list_itr->first = nele;
    5. nele ->next =temp;
    6. }


    So kann ich zumindest mehrere elemente einfügen aber das eigentliche problem habe ich immer noch nicht gelöst !
    Außerdem habe ich noch ein problem in der remove gefunden
    die fälle das das löschende element am anfang oder am ende ist wird zuerst vernachlässigt

    Quellcode

    1. int löschen(struct list *list, int val)
    2. {
    3. struct element * itr;
    4. struct element * itr2;
    5. struct list * lsit_itr = list;
    6. struct element *tmp;
    7. if (list_itr->first == NULL)
    8. {
    9. printf("liste leer");
    10. }
    11. else {
    12. itr = list->first;
    13. while (itr ! = NULL)
    14. {
    15. itr2 = itr->next;
    16. if (itr2->value == val)
    17. {
    18. itr -> next = itr->next->next;
    19. }
    20. itr = itr->next;
    21. }
    22. }
    23. }
    Alles anzeigen


    Zur beschreibung ich fange an mit dem ersten element schaue nach ob das nachfolge element entsprechenden wert hat falls ja setze ich die zeiger des aktuellen elementes einfach zwei weiter also überspringe sozusagen das zu löschende element! allerdings bekomme ich dann immer ein: segmentation fault

    verstehe aber nicht warum hängt aber wohl mit itr und itr2 zusammen

    denn wenn ich ohne itr2 arbeite dann fuktioniert es wunderbar nur leider löscht es mir dann das element nach dem gesuchten logisch da ich eben nicht das nachfolgende ausgehend vom akutellen überprüfe sondern das aktuelle überprüfe und dessen zeiger ich dann ändere

    bitte helft mir könnte echt verzweifeln so langsam

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von the_old_Pirate ()