c - while 循环内的 if else 语句。(我试图在链表中的给定位置插入一个节点。)

标签 c loops if-statement linked-list infinite-loop

void insertM(struct node **s,int pos,int n)
   {    
   struct node *temp,*e;
   temp=(struct node *)malloc(sizeof(struct node));
   temp->x=n;
   temp->link=NULL;
   int count=1;
   e=*s;
   while(e!=NULL)
   {
       if(count==pos)
       {
           temp->link=e->link;
           e->link=temp;
       }          
       else
       {
           e=e->link;
           count++;
       }

   }
}

如果我删除上面的 else 语句并将其内容放在 if 语句后面的 while 循环中,则程序可以正常工作。但用 else 语句就不行了。为什么? else 语句有什么问题?

最佳答案

问题是当count==pos时获取true你有一个无限循环,因为你没有改变 ecount不再了。换句话说,执行将不断地采用 if 语句的 TRUE 路径并永远持续下去。

您应该添加 break声明 - 例如:

   if(count==pos)
   {
       temp->link=e->link;
       e->link=temp;

       break;  // Break out of the while-loop as we are done
   }          

您的代码在没有 else 部分的情况下工作的原因是 counte在每个循环中都被改变。所以迟早你会到达列表的末尾并且循环终止。

但是,为了提高性能,最好使用 break声明。

另请注意,使用 pos 调用时您的代码存在错误。等于 1。您需要将其作为特殊情况处理并更新 *s

关于c - while 循环内的 if else 语句。(我试图在链表中的给定位置插入一个节点。),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38920281/

相关文章:

python - 使用 py2exe 构建带有扩展的 python 程序

java - 不断请求用户输入

python - scrapy+selenium+phantomjs 中的循环问题

jQuery - 如何确定变量的一部分是否在数组中

java - 如何用某个变量结束 while 循环

c - 使用数组生成序列?

c - 有必要将 NULL 转换为结构指针类型以在 C 中进行赋值/比较吗?

读入文本文件并显示除所有空行和注释外的每一行的 C 程序

c++ - 优化循环并避免模板特化中的代码重复

javascript - If 语句未通过测试用例