В каких случаях надо использовать условие while(list != null) и while(list.next != null)
Смотря что нужно. Можно использовать и то, и то.
/* предполагая, что где-то в цикле есть list = list.next */
Условие while(list != null) означает "двигайся по списку, пока не выйдешь за последний элемент".
Условие while(list.next != null) означает "двигайся по списку, пока не дойдешь до последнего элемента".
Соответственно, в зависимости от задачи надо выбрать или одно, или другое. Сказать однозначно "делай так, а не иначе" просто невозможно.