Здравствуйте, я получил связанный список от моего учителя, и мне нужно добавить 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);
}