int undef(char *s) {
if (s == NULL)
return -1;
nlist *np,*temp=NULL;
int flag = 0;
for (np = hashtab[hash(s)];np != NULL;np = np->next) {
if (strcmp(np->name, s) == 0) {
if (flag == 0) {//flag是0说明要删除的是第一个节点
hashtab[hash(s)] = np->next; //hashval下标指向原第一个节点的下一个节点
}
else
{
//不是第一个节点 ,上一个节点指向np下一个节点
temp->next = np->next;
}
free(np->name);//释放当前节点
free(np);
return 0;
}
++flag;//标识增加
temp = np;//记录上一个节点
}
return -1;
}