Vedila così: ad ogni iterazione possono aversi i seguenti casi:
- entrambe le liste sono finite => esco dal ciclo;
- solo la prima lista è finita => necessariamente prendo l'elemento dalla seconda lista;
- solo la seconda lista è finita => necessariamente prendo l'elemento dalla prima lista;
- ci sono ancora elementi nelle due liste => prendo l'elemento dalla prima o dalla seconda in base a quello che ha valore minore

Quel codice non fa altro che implementare queste condizioni, solo che sono scritte in maniera più compatta (e in maniera da evitare il confronto se una delle due liste è terminata, nel qual caso si avrebbe un segmentation fault).