我正在处理一个哈希表,并且用户可以从哈希表的每个索引更新该索引的链表,并为该哈希表索引中的人创建朋友列表。我已成功将名称添加到列表中,但似乎无法弄清楚如何打印它们。我不断得到一个无限循环,反复打印列表中的名字。
void printFriends(char *name){
struct node *myNode=searchForPerson(name); //returns address of node in the hash
if(myNode->nxtfriend==NULL)
printf("No Friends\n");
while(myNode!=NULL){
printf("%s ",myNode->value);
myNode=myNode->nxtfriend;
}
printf("\n");
}
void insertFriend(char *name,char *friend){
struct node *friendee=searchForPerson(name);
struct node *newfriend=createFriend(friend);
if(friendee->nxtfriend==NULL)
friendee->nxtfriend=newfriend;
if(friendee->nxtfriend!=NULL){
newfriend->nxtfriend=friendee->nxtfriend;
friendee->nxtfriend=newfriend;
}
答案 0 :(得分:1)
在insertFriend
中,创建一个指向自身的节点。
首先,对最后一个节点(if(friendee->nxtfriend==NULL) friendee->nxtfriend=newfriend;
)的检查会将friendee->nxtfriend
指向新朋友。然后在下一条语句中,如果nxtfriend
不为NULL(不是因为您只是将其设置为nxtfriend
),则将newFriend->nxtfriend
设置为friendee->nxtfriend
只需设置为newFriend
。这样会产生newFriend->nxtfriend == newFriend
和无限循环。
重新考虑如何将节点插入列表中。