这是列表的声明:
typedef struct list
{ char let;
struct list *next;
struct list *prev;
}list;
list *start=NULL, *stop=NULL;
让测试词成为 Example
用于创建列表的函数按预期方式工作。我试图printf的stop->let
和stop->prev->next->let
以及做start->next...->next->let
一路到最后一个只是为了检查每个环节工作。我收到最后一封信e
。
但是,以下for
循环在显示最后一个字母之前就结束了。(输出为Exampl
):
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->prev
以及stop->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!=NULL
和current->prev!=NULL
将为假,并且循环甚至不会执行一次。因此,由于for
循环永远不会执行,因此不会打印任何内容。
为了更清楚地了解for
循环的工作原理,请参见以下流程图:
您也可以查看本教程中的for
循环。
您还可以查看Wiki文章:For循环
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句