/* here, I think it is supposed to be looking up the last np
by iterating over the *hashtab[hashval], where the last_np->next == NULL,
coded like
for (np=hashtab[hash(s)];;np=np->next)
if (np->next == NULL) {lastnp=np;break;}
and then update the last_np->next with the newly malloced np,
while the new np->next=NULL since it is the last of the linked list. */