Ваше определение функции не имеет смысла. Например, есть утечки памяти, как в этом фрагменте кода
head=(struct Node*)malloc(sizeof(struct Node));
printf("Enter a value: ");
scanf("%d",&head->val);
if(head->val==-1){
head=NULL;
}
То есть сначала выделяется память, а ее адрес назначается головке указателя, а затем, если пользователь ввел -1, указатель перезаписываетсязначение NULL. Таким образом, выделенная память не была освобождена.
Также цикл while всегда добавляет в список узел со значением -1.
Функция может быть определена следующим образом
struct Node* Create_List( void )
{
struct Node *head = NULL;
struct Node **current = &head;
while ( 1 )
{
printf( "Enter a value of the node (-1 - exit): " );
int val;
if ( scanf( "%d", &val ) != 1 || val == -1 ) break;
*current = malloc( sizeof( struct Node ) );
( *current )->val = val;
( *current )->next = NULL;
current = &( *current )->next;
}
return head;
}