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
你有一个无限循环,因为你没有改变 e
和count
不再了。换句话说,执行将不断地采用 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 部分的情况下工作的原因是 count
和e
在每个循环中都被改变。所以迟早你会到达列表的末尾并且循环终止。
但是,为了提高性能,最好使用 break
声明。
另请注意,使用 pos
调用时您的代码存在错误。等于 1。您需要将其作为特殊情况处理并更新 *s
关于c - while 循环内的 if else 语句。(我试图在链表中的给定位置插入一个节点。),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38920281/