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

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

最佳答案

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

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

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

关于c - 链表无限循环问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55174029/

10-12 04:47