搜索
查看: 393|回复: 5
打印 上一主题 下一主题

啊哈算法2.4中链表的问题

[复制链接]
跳转到指定楼层
楼主
发表于 2017-12-27 20:33:19 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
在链表中插入一个数,代码是书上的代码,11行的break为什么要加不是很理解,去掉break后,代码可以编译但是无法运行出正确结果
if循环中t->next=p; 这一句应该能保证跳出了if循环,不加break的话,为什么程序会出问题呢
[mw_shl_code=c,true]t=head;  
scanf("%d",&a);  
while(t!=NULL)  
{  
   if(t->next->date>a)  
    {  
     p=(struct node *)malloc(sizeof(struct node));  
     p->date=a;  
     p->next=t->next;   
     t->next=p;
     break;  
    }  
   t=t->next;  
}  [/mw_shl_code]
沙发
发表于 2017-12-27 21:21:32 | 只看该作者
break 是跳出了 while 而不是 if
板凳
 楼主| 发表于 2017-12-27 21:35:34 | 只看该作者
本帖最后由 litianhua 于 2017-12-27 21:36 编辑
4399APPLE 发表于 2017-12-27 21:21
break 是跳出了 while 而不是 if

请您指点,如果没有break的话,这个程序会在哪里出错啊,按照我的理解,即使没有break,最终也可以跳出while循环,不会影响程序的最后结果,但是我去掉break之后,程序就跑不下去了,输如数据后,没后反应,然后就自己关闭了

捕获.PNG (126.93 KB, 下载次数: 22)

捕获.PNG
地板
 楼主| 发表于 2017-12-27 22:05:34 | 只看该作者
4399APPLE 发表于 2017-12-27 21:21
break 是跳出了 while 而不是 if

我好像懂了,如果没有break,插入某个点之后,if(t->next->date>a)这个条件总能满足,所以会导致无限插入该点,不知道我的理解对不对
5#
发表于 2017-12-27 22:12:13 | 只看该作者
litianhua 发表于 2017-12-27 22:05
我好像懂了,如果没有break,插入某个点之后,if(t->next->date>a)这个条件总能满足,所以会导致无限插入 ...

是这样                                                
6#
 楼主| 发表于 2017-12-27 22:29:31 | 只看该作者

多谢指点                                         
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表