当然有为空的风险了。temp是R的next,你只判断R不为空,但R->next可能是空的啊。你有temp = temp->next;如果temp为空,那么temp->next就会报错了
第一种写法:R先被赋值为temp,即R.next,然后 temp被赋值为temp.next,即R.next.next,但是循环只对R做了判断,不能保证R.next不为空
第二种写法:temp在循环后被赋值为R.next,然后R被更新为R.next,如果R.next为空,循环会正确停止
区别是第一种循环是先取了temp,此时无法保证temp不为空,然后紧接着就在循环内取了temp.next