使用循环遍历链表

One*_*ror 8 c

我正在阅读关于链表的几个基本操作,我看到主要使用两种类型的循环


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循环后,如果你想使用你,你没有尾巴(除非你临时分配给任何其他临时变量来改变程序的逻辑)它在进一步的步骤.这是唯一的区别.除了没有太大区别.

您可以通过编写一个小程序并打印结果来检查它.我建议你这样做.


Bla*_*ace 5

循环不相同.实际上,你的for循环有问题.考虑start==NULL在进入for循环之前会发生什么.

for(tmp=start;tmp->next!=NULL;tmp=tmp->next);
Run Code Online (Sandbox Code Playgroud)

分配starttmp再解引用tmp,NULL指针.我想你想要以下内容.

for(tmp=start;tmp!=NULL;tmp=tmp->next);
Run Code Online (Sandbox Code Playgroud)

这种变化使得forwhile循环相同.