Verkette Liste am Ende einfügen

atiufi

Cadet 2nd Year
Registriert
März 2016
Beiträge
24
Hallo,
ich habe eine Aufgabe vor mir undzwar habe ich eine verkette Liste bekommen und ich soll 2 Funktionen erstellen,eine Funktion soll alle zahlen in dieser Liste addieren und die andere soll wenn der Zeiger auf Null zeigt eine neue Liste erstellen, die erste Funktion habe ich hinbekommen aber bei der zweiten Funktion verstehe ich es nicht wie ich das in ein Code schreiben soll.
Ich bin so weit gekommen bis jetzt
Die 2 Funktionen die zu bearbeiten sind sind ganz unten(sum up elements und insert at tail)
ich wollte mit dem list pointer so weit gehen bis es auf NULL zeigt und dann dort eine Number einfügen aber wenn ich dann versuche die Funktion in Main aufzurufen klappt das nicht so ganz.
C:
#include <stdio.h>
#include <stdlib.h>

// Datentyp fuer die Knoten der verketteten Liste. Die Listenelemente sind
// Zahlen. Ein Knoten besteht aus einer Zahl und aus einem Zeiger.
struct node {
    int number;
    struct node *next;
};


// Funktionsprototyp zum Hinzufuegen einer neuen Zahl in die Liste.
// Die Zahl wird am Listenkopf hinzugefuegt.
// Erhaelt die Zahl und den aktuellen Listenkopf als Parameter, liefert
// den neuen Listenkopf zurueck
struct node *insert_at_head(int x, struct node *list);

// Funktionsprototyp zum Anzeigen der Listenelemente. Erhaelt den Listenkopf
// als Parameter, hat keinen Rueckgabewert (void)
void display_list(struct node *list);

// Funktionsprototyp zum Addieren der Zahlen in der Liste. Erhaelt den
// Listenkopf, liefert die Summe der Zahlen in der Liste zurueck. Liefert 0
// zurueck fuer die leere Liste. Den Funktionsrumpf weiter unten ergaenzen!
int sum_up_elements(struct node *list);

// Funktionsprototyp zum Hinzufuegen einer neuen Zahl in die Liste.
// Die Zahl wird am Listenende hinzugefuegt.
// Erhaelt die Zahl und den aktuellen Listenkopf als Parameter, liefert
// den neuen Listenkopf zurueck. Den Funktionsrumpf weiter unten ergaenzen!
struct node *insert_at_tail(int x, struct node *list);


int main() {
    // my_list ist ein Zeiger auf struct node. Urspruenglich NULL, Liste ist leer
    struct node *my_list = NULL;

    my_list = insert_at_head(10, my_list);
    // Die Zahl 3 in die Liste hinzufuegen. Den zurueckgelieferten Zeiger
    // der my_list zuweisen, d.h., my_list zeigt danach zum Knoten mit der Zahl
    // "3".
    my_list = insert_at_head(3, my_list);

    // Noch ein paar weitere Zahlen einfuegen

    my_list = insert_at_head(15, my_list);
    // Jetzt ist 15 am Listenkopf!

    my_list = insert_at_head(-4, my_list);
    // Jetzt ist -4 am Listenkopf!

    my_list = insert_at_head(99, my_list);
    // Jetzt ist 99 am Listenkopf!
    // Die Listenelemente anzeigen
    display_list(my_list);
    printf("Sum of the numbers: %d\n",sum_up_elements(my_list));

    return(0);
}

// Implementierung der Funktion insert_at_head
struct node *insert_at_head(int x, struct node *z) {
    struct node *new_node = malloc(sizeof(struct node));
    if (new_node == NULL) {
        printf("Fehler bei der Speicherallokation\n");
        return(NULL);
    }

    // Die Zahl x in den neuen Knoten speichern
    new_node->number = x;
    // Verweis zum naechsten Knoten, naemlich zum aktuellen Listenkopf
    new_node->next = z;

    // Zeiger zum neuen Knoten zurueckgeben
    return(new_node);
}

// Implementierung der Funktion display_list
void display_list(struct node *z) {
    while (z != NULL) {
        printf("%d ", z->number);
        z = z->next;
    }
    printf("\n");
}

int sum_up_elements(struct node *z) {
    int sum=0;
    for(; z->next !=NULL;z=z->next){
        sum +=z->number;
    }
    return(sum);
}

struct node *insert_at_tail(int x, struct node *list) {
    struct node *new_node = malloc(sizeof(struct node));
    if (new_node == NULL) {
        printf("Fehler bei der Speicherallokation\n");
        return(NULL);
    }
    for(;list->next!=NULL;list=list->next){
        new_node->number=x;
    }
    return(new_node);
}

Hoffe mir kann da jemand helfen und mich aufklären.
Mit freundlichen Grüßen

atiufi
 
Dann erzähl dir doch am besten mal selbst, was du mit dieser Schleife bezweckst. Die ist zwar eine gute Idee, und du brauchst sie sogar genau so, allerdings machst du nichts sinnvolles damit.

Also: Erkläre dir in einem Satz, was deine Schleife jetzt gerade macht und dann vergleiche das mit dem, was du eigentlich haben willst.
 
  • Gefällt mir
Reaktionen: BAGZZlash, abcddcba, atiufi und eine weitere Person
Zurück
Oben