Реализация однонаправленного связного списка - 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;
}

Объяснение кода листинга программы

  1. Структура связного списка struct list объявлена с полями next и content.
  2. Функция createList выделяет память под новый элемент списка, инициализирует его поля next и content и возвращает его адрес.
  3. Функция addToList принимает указатель на голову списка и значение, которое нужно добавить в список. Создает новый элемент списка, инициализирует его поля next и content и добавляет его в начало списка.
  4. Функция printList принимает указатель на голову списка и выводит содержимое каждого элемента списка, пока не встретит NULL.
  5. В функции main создается новый список, в который добавляются элементы со значениями 5, 7, 2, 1, 9, 3.
  6. Затем вызывается функция printList, чтобы вывести содержимое списка.
  7. Наконец, функция main возвращает 0, завершая работу программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.167 из 5
Похожие ответы