Ваша проблема
void Insert (Link * head, HashEntry data)
Измените его на
void Insert (Link *& head, HashEntry data)
В основном указатели передаются по значению
То, что вы пытаетесь сделать, равно
void Bar( Link* input )
{
input = new Link();
}
Link* foo = 0;
Bar( foo );
После возвращения Bar foo будет по-прежнему 0 .Когда вы передаете указатель по значению, вы можете изменить содержимое того, на что он указывает, а не сам указатель.Чтобы все вышеперечисленное работало должным образом, вы можете
ALTERNATIVE 1
Передать по указателю по ссылке
void Bar( Link*& input )
{
input = new Link();
}
Link* foo = 0;
Bar( foo );
ALTERNATIVE 2
Передать указатель на указатель
void Bar( Link** input )
{
*input = new Link();
}
Link* foo = 0;
Bar( &foo );