gpt4 book ai didi

c - 链表无限循环问题

转载 作者:行者123 更新时间:2023-11-30 14:41:02 25 4
gpt4 key购买 nike

我正在处理一个哈希表,并且从哈希表的每个索引,用户都可以从该索引更新链接列表,并为该哈希表索引中的人创建 friend 列表。我已成功将名称添加到列表中,但我似乎不知道如何打印它们。我不断地得到一个无限循环,一遍又一遍地打印列表中的第一个名字。

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 指向新 friend 。然后在下一条语句中,如果 nxtfriend 不为 NULL(这不是因为您刚刚将其设置为 nxtfriend),则设置 newFriend->nxtfriendfriendee->nxtfriend,您刚刚将其设置为 newFriend。这会导致 newFriend->nxtfriend == newFriend 以及无限循环。

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com