为什么这个提交11行的while不能交换顺序啊?不是一样的吗,当就是错了

img


我这个leetcode的题目那个while交换顺序以后就错了,一定要那个tepm.next在前面才能成功,这是为什么啊,求解答

当然不能交换了,这个while条件,先判断&&前面的表达式,如果为真,才会判断后面的表达式。
如果temp->next为空,那么如果执行temp->next->next是会崩溃的。所以必须先判断temp->next是否为空,如果不为空,才判断temp->next->next是否为空

1.&&是逻辑与,它在处理bool逻辑上与算术与&是等价的,但是还是有很多区别
首先&在计算int型的时候与&&的结果是不一致的
其次,&&具有短路特性,当左边的值已经是false,那么右边的表达式将不进行计算
2.必须把大的非空判断先判断,再进行它下面的属性的非空判断
比如你要判断一个通信地址xxx省yyy市zzz街道是否存在,你总要先看xxx省是否存在,如果存在再判断yyy市,你不能反过来
如果连xxx省都不存在,你上哪找zzz街道去?

这就是简单的逻辑运算符结合方向的问题,&& 是从左到右,左边不成立右边不用看的。。
你交换之后如果temp->next 为空了,你就不能使用temp->next->nex 了