Следующие изменения должны исправить проблему.
Далее передается адрес заголовка списка (начало), поэтому содержимое заголовка списка может быть изменено.
Я также включил соответствующую проверку ошибок
в прототипах заменить:
void insert_beg(struct node *START);
с:
void insert_beg(struct node **START);
заменить функцию insert_beg()
на следующую:
void insert_beg(struct node **START)
{
struct node *new_node = malloc(sizeof(struct node));
if( !new_node )
{
perror( "malloc failed" );
// free all allocated memory, then
exit( EXIT_FAILURE );
}
printf("Enter the data to be stored : ");
if( scanf("%d",&new_node->val) != 1 )
{
fprintf( stderr, "scanf for data failed\n" );
free( new_node );
}
if( !(*START) )
{ // list is empty
*START = new_node;
new_node->link = NULL;
}
else
{ // list already contains (at least) one node
new_node->link = *START;
*START = new_node;
}
// return START;
}
При звонке insert_beg()
используйте следующий оператор:
insert_beg(&start);
Обратите внимание, что параметром является адрес заголовка списка, а не содержимое заголовка списка