我正在阅读关于链表的几个基本操作,我看到主要使用两种类型的循环
struct node {
int data;
struct node *next;
}*start=NULL,*tmp;
Run Code Online (Sandbox Code Playgroud)
第一个循环是形式
for(tmp=start;tmp->next!=NULL;tmp=tmp->next);
Run Code Online (Sandbox Code Playgroud)
使用上面的循环,现在tmp指针指向列表中的最后一个节点
第二个循环是形式
tmp=start;
while(tmp!=NULL)
{
// do something
}
Run Code Online (Sandbox Code Playgroud)
我认为他们都做同样的工作,但我不确定.有什么区别吗?
mk.*_*k.. 13
我想你的while循环是这样的.
temp=start;
while(temp!=NULL)
{
// do something
temp= temp->next;
}
Run Code Online (Sandbox Code Playgroud)
在for循环的代码中,当你不在for循环中时,temp不指向NULL.temp指向链表的末尾.但在情况下while循环,你的温度指向NULL退出while循环后,如果你想使用你,你没有尾巴(除非你临时分配给任何其他临时变量来改变程序的逻辑)它在进一步的步骤.这是唯一的区别.除了没有太大区别.
您可以通过编写一个小程序并打印结果来检查它.我建议你这样做.
循环不相同.实际上,你的for循环有问题.考虑start==NULL在进入for循环之前会发生什么.
for(tmp=start;tmp->next!=NULL;tmp=tmp->next);
Run Code Online (Sandbox Code Playgroud)
分配start到tmp再解引用tmp,NULL指针.我想你想要以下内容.
for(tmp=start;tmp!=NULL;tmp=tmp->next);
Run Code Online (Sandbox Code Playgroud)
这种变化使得for和while循环相同.