if语句条件判断问题

img


图中波浪线部分的if语句,fast比slow跑得快,怎么能轮得上判断slow等不等于NULL呢?还有后面只判断了fast的后继,那如果fast刚好是NULL呢?是会报错还是不执行if语句?

从独立判断来说,加上fast !=NULL的判断更严谨
如果从代码相关性来看,前面的while循环会保证fast不为空,所以if不判断fast是否为空也成立,但会依赖于前面的判断。
slow不为空的判断,存粹只是从独立逻辑判断,因为下面代码直接对slow进行指针操作了。可能从while循环逻辑看,slow也不会为空

个人理解:
一开始fast和slow是相等的,有两种情况:
1、一开始能够进入while循环证明fast和slow一开始都不是NULL,此时如果while循环是因为break而退出的话,此时的slow和fast以及fast->next都不可能是NULL,后边的if判断不会走;如果while循环是因为条件不成立而退出的话,此时可以断定slow不可能是NULL,而fast或者fast->next肯定至少有一个是NULL,无论他们俩谁是NULL,后边的if判断条件肯定成立会执行。
2、一开始不能进入while循环证明fast和fast->next肯定至少有一个是NULL,因为还没走,所以此时if判断的slow其实也就是fast。

可以看下 c参考手册中的 c语言-预处理器-条件包含