Проблема бесконечного цикла в связанном списке - PullRequest
0 голосов
/ 15 марта 2019

Я работаю над хеш-таблицей, и из каждого индекса хеш-таблицы пользователь может обновить связанный список из этого индекса и создать список друзей для человека в этом индексе хеш-таблицы.Я успешно добавляю имена в список, но не могу понять, как их распечатать.Я постоянно получаю бесконечный цикл, который печатает имя в списке снова и снова.

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 Ответ

1 голос
/ 15 марта 2019

В insertFriend вы создаете узел, который указывает на себя.

Сначала проверка последнего узла (if(friendee->nxtfriend==NULL) friendee->nxtfriend=newfriend;) будет указывать friendee->nxtfriend на нового друга.Затем в следующем операторе, если nxtfriend не равно NULL (а это не потому, что вы просто установили его на nxtfriend), вы устанавливаете newFriend->nxtfriend на friendee->nxtfriend, которое вы просто установите на newFriend.Это приводит к newFriend->nxtfriend == newFriend и вашему бесконечному циклу.

Пересмотрите, как вы хотите вставить узлы в свой список.

...