Связанный список, суммирующий элементы и вставляющий в конце функции - PullRequest
0 голосов
/ 23 февраля 2019

Здравствуйте, я получил связанный список от моего учителя, и мне нужно добавить 2 функции, первая должна суммировать элементы, а вторая должна добавить новый узел в конце.Теперь я мог легко выполнять первую функцию, но не мог выполнять вторую функцию.Я думал, что вам нужно идти с указателем, пока указатель показывает NULL, а затем создать новый узел там, но у меня есть проблемы с кодированием, и я не знаю, как я должен вызывать функцию в основной функции.Проигнорируйте комментарии, они - немецкое объяснение. Вот код и как я попробовал второй:

#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));
    printf("%d\n",insert_at_tail(20,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;
    new_node->next=NULL;
    if(list==NULL)
    return(new_node);

    struct node *new_head=list;

    return(new_head);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...