Создать и заполнить линейный односвязный список - C (СИ)

Формулировка задачи:

Здравствуйте! Мне нужно создать и заполнить линейный односвязный список. Вот код, который у меня получился:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
typedef struct Node
{
    int val;
    struct Node *next;
} Node;
void PushList(Node** head, int value)
{
    Node *tmp = (Node*)malloc(sizeof(Node));
    tmp->val = value;
    tmp->next = (*head);
    (*head) = tmp;
    free(tmp);
}
void PrintList(const Node *head)
{
    while (head != NULL)
    {
        printf("%d", head->val);
        head = head->next;
    }
    printf("\n");
}
void main()
{
    int i;
    Node *head = NULL;
    for (i = 0; i<10; i++)
        PushList(head, i);
    PrintList;
}
Вроде бы все правильно, никаких ошибок не выдает, но программа не работает. Подскажите пожалуйста что не так!

Код к задаче: «Создать и заполнить линейный односвязный список - C (СИ)»

textual
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
typedef struct Node
{
    int val;
    struct Node *next;
} Node;
void PushList(Node** head, int value)
{
    Node *tmp = (Node*)malloc(sizeof(Node));
    tmp->val = value;
    tmp->next = (*head);
    (*head) = tmp;
    free(tmp); // Ни в коем случае. Ведь этот узел должен хранить значение
}
void PrintList(const Node *head)
{
    while (head != NULL)
    {
        printf("%d", head->val);
        head = head->next;
    }
    printf("\n");
}
void main()
{
    int i;
    Node *head = NULL;
    for (i = 0; i<10; i++)
        PushList(head, i); // Нужно передавать не указатель, а его адрес
    PrintList; // Вообще "абракадабра". Функция так не вызывается. Тем более она требует передачу параметра head
}

7   голосов, оценка 4.143 из 5


СОХРАНИТЬ ССЫЛКУ