Реализация однонаправленного связного списка - C (СИ)
Формулировка задачи:
Здравствуйте! Пишу реализацию однонаправленного связанного списка.
Не могу определить в чем проблема реализации. Подскажите. Спасибо.
Пишет segmentation fault
#include <stdio.h> #include <stdlib.h> struct list { struct list * next; int content; }; struct list * createList() { return (struct list *)malloc(sizeof(struct list *)); } void addToList( struct list * lst, int content ) { struct list * newList = createList(); newList->next = lst; newList->content = content; lst = newList; } void printList( struct list * lst ) { if( lst == NULL ) return; struct list * current = lst; do{ printf("(%d,%p) ", current->content, current); } while( (current=current->next)!= NULL ); printf("\n"); } int main( int argc, char ** argv ) { struct list * nl = createList(); addToList(nl,5); addToList(nl,7); addToList(nl,2); addToList(nl,1); addToList(nl,9); addToList(nl,3); printList(nl); return 0; }
Решение задачи: «Реализация однонаправленного связного списка»
textual
Листинг программы
struct list { struct list * next; int content; }; struct list * createList() { struct list * newList= (struct list *)malloc(sizeof(struct list)); newList->next = NULL; newList->content = 0; return newList; } void addToList(struct list ** lst, int content) { struct list * newList = createList(); newList->next = *lst; newList->content = content; *lst = newList; } void printList(struct list * lst) { if (lst == NULL) return; struct list * current = lst; do { printf("(%d,%p)\n", current->content, current); current = current->next; } while (current != NULL); printf("\n"); } int main(int argc, char ** argv) { struct list * nl = createList(); addToList(&nl, 5); addToList(&nl, 7); addToList(&nl, 2); addToList(&nl, 1); addToList(&nl, 9); addToList(&nl, 3); printList(nl); return 0; }
Объяснение кода листинга программы
- Структура связного списка
struct list
объявлена с полямиnext
иcontent
. - Функция
createList
выделяет память под новый элемент списка, инициализирует его поляnext
иcontent
и возвращает его адрес. - Функция
addToList
принимает указатель на голову списка и значение, которое нужно добавить в список. Создает новый элемент списка, инициализирует его поляnext
иcontent
и добавляет его в начало списка. - Функция
printList
принимает указатель на голову списка и выводит содержимое каждого элемента списка, пока не встретитNULL
. - В функции
main
создается новый список, в который добавляются элементы со значениями 5, 7, 2, 1, 9, 3. - Затем вызывается функция
printList
, чтобы вывести содержимое списка. - Наконец, функция
main
возвращает0
, завершая работу программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д