Funkcja add nie trzyma się kupy. Po pierwsze, cały czas przesyłasz do funkcji head z wartością NULL, więc funkcja stoi w martwym punkcie. Po drugie, w if dodajesz element na początek listy, zaś w else już na koniec. Nieco konsekwencji. Kod poprawiony powinien wyglądać tak:
struct node{
int x;
node *next;
};
void add(node **node1, int value)
{
node *temp = new node;
temp->x = value;
temp->next = 0;
if(*node1 == 0)
{
*node1 = temp;
}
else{
node *temp1 = *node1;
while(temp1->next != 0)
{
temp1 = temp1->next;
}
temp1->next = temp;
//node1 = temp1;
}
}
void print(node *node1)
{
while(node1!= 0)
{
cout << node1->x << endl;
node1 = node1->next;
}
}
int main()
{
node *start = 0;
add(&start, 5);
add(&start, 5);
add(&start, 5);
add(&start, 5);
print(start);
return 0;
}