gpt4 book ai didi

c - 链表节点删除后追加问题

转载 作者:行者123 更新时间:2023-11-30 15:09:34 24 4
gpt4 key购买 nike

我可以在我的链表节点中追加、显示、修改、删除和搜索。删除效果很好,但是当我想在那之后追加时,它似乎会覆盖(或删除节点)。

假设我有:

A - B - C 节点

我删除了B节点。之后看起来像:A - C。我想附加一个 D 节点,如下所示:A - C - D。

但是,它看起来像这样:A - D

这可能是什么问题?

整个项目相当大,但删除看起来像这样:

    for ( ; llist->next != NULL; llist = llist->next)
{
if(strcmp(text, llist->book)==0)
{
break;
}
prev = llist;
}

if ( llist != NULL )
{
if ( llist == head)
{
head = llist->next;
}
else
{
prev->next= llist->next;
}

free(llist);
printf("The %s string has been deleted!\n", text);
}

附加代码如下所示:

 while(getline(text,MAX)) 

{

if(!(llist = (struct lib*)malloc(sizeof(struct lib)))) { /*mem allocation*/
break;
}

if(head) {
prev->next= llist;
} else {
head= llist;
}
prev = llist;

llist -> next= NULL;


while(!textcheck(text))
{
printf("Please retype the name in the correct format: ");
getline(text, MAX);
}

strcpy(llist->author, text); //hozzáírunk a láncolt listához

printf("Please type the title of the book: ");
getline(text, MAX);
strcpy(llist->book,text);


printf("Please type the release date: ");


getline(szoveg, MAX);

while(!yearcheck(text)) {
printf("Please type a year between 1500 and 2016: ");
getline(text, MAX);

}
num = atoi(text);

llist->year = num;


printf("Please type a topic: \n");
printf("Topics: SciFi, Haboru, Fantasy,\nEletrajz, Ismeretterjeszto, Thriller, Akcio\n");


strcpy(llist->tema, text);
}

最佳答案

让我们以 A-B-C 为例。从第一个循环开始,一旦删除节点 B,prev 就会变为 A:

for ( ; llist->next != NULL; llist = llist->next) 

{

if(strcmp(text, llist->book)==0){
break;
}
prev = llist;

}

之后,当涉及到追加时,它会更新为:

if(head){
prev->next= llist;
}

这意味着A的下一个将指向D而不是C。因此,C 的引用丢失,最终列表将类似于 A-D

关于c - 链表节点删除后追加问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36603991/

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