gpt4 book ai didi

c - 双向链表上的 FOR 循环不返回最后一个元素。反过来会出现段错误

转载 作者:行者123 更新时间:2023-11-30 17:05:10 25 4
gpt4 key购买 nike

这是列表的声明:

 typedef struct list
{ char let;
struct list *next;
struct list *prev;
}list;
list *start=NULL, *stop=NULL;

让测试词为示例

用于创建列表的函数按预期工作。我尝试打印 stop->letstop->prev->next->let 以及 start->next...->next->let 一直到最后一个只是为了检查每个链接是否正常工作。我确实得到了最后一个字母e

但是,以下 for 循环在显示最后一个字母之前结束。 (输出为示例):

for(current=start;current->next!=NULL;current=current->next)
printf("%c",current->let);

此外,尝试从右到左显示单词会在显示任何内容之前出现段错误:

for(current=stop;current->prev!=NULL;current=current->prev)
printf("%c",current->let);

根据要求,这里是创建列表的函数。输入是一个字符串。计算出 strlen 后,该函数为每个字母创建一个新节点。

void create(list *first)

{ list* new_node, *current;
char word[50];

printf("Please input the word: "); //read the input
scanf("%[^\n]s",&word);
for(int i=0;i<=strlen(word)-1;i++)
{ new_node=malloc(sizeof(list));
new_node->let=word[i];
if(first==NULL)
{

start=first=current=new_node;
current=new_node;
new_node->prev=NULL;
}
else
if(i==strlen(word)-1)
{
current->next=new_node;
new_node->prev=current;
new_node->next=NULL;
stop=current=new_node;


}
else
{
current->next=new_node;
new_node->prev=current;
current=new_node;
}

}

注意:

1.列表创建后,start->prevstop->next 均为 NULL

2.完全相同的 for 循环非常适合单链表。

3.list *current是显示函数的局部变量。

最佳答案

改变

for(current=start;current->next!=NULL;current=current->next)
printf("%c",current->let);

for(current=start;current!=NULL;current=current->next)
printf("%c",current->let);

也改变

for(current=stop;current->prev!=NULL;current=current->prev)
printf("%c",current->let);

for(current=stop;current!=NULL;current=current->prev)
printf("%c",current->let);

由于 current->next!=NULLcurrent->prev!=NULL 将为 false,循环甚至不会执行一次。因此,由于 for 循环永远不会执行,因此不会打印任何内容。

为了更清楚地了解 for 循环的工作原理,请参阅此流程图:

enter image description here

您还可以查看this for 循环教程。

您还可以查看维基文章:For loop

关于c - 双向链表上的 FOR 循环不返回最后一个元素。反过来会出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35428868/

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