assert(NULL == min && NULL == max);
or
```
if (NULL == min)
{
    assert(NULL == max);
    min = max = (Rlist*)rp;
}
```
You're testing whether either of them is null, but overwriting both of them; which is indeed correct (because they both make the transition away from NULL here, together, so both are NULL until both are non-NULL) but it reads confusingly.