链表无限循环问题

时间:2019-03-15 00:43:30

标签: c pointers linked-list hashtable

我正在处理一个哈希表,并且用户可以从哈希表的每个索引更新该索引的链表,并为该哈希表索引中的人创建朋友列表。我已成功将名称添加到列表中,但似乎无法弄清楚如何打印它们。我不断得到一个无限循环,反复打印列表中的名字。

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;
}

1 个答案:

答案 0 :(得分:1)

insertFriend中,创建一个指向自身的节点。

首先,对最后一个节点(if(friendee->nxtfriend==NULL) friendee->nxtfriend=newfriend;)的检查会将friendee->nxtfriend指向新朋友。然后在下一条语句中,如果nxtfriend不为NULL(不是因为您只是将其设置为nxtfriend),则将newFriend->nxtfriend设置为friendee->nxtfriend只需设置为newFriend。这样会产生newFriend->nxtfriend == newFriend和无限循环。

重新考虑如何将节点插入列表中。