На основании всех сравнений, которые вы выполняете в коде, кажется, что это отсортированный связанный список, а не обычный связанный список.
Этот фрагмент кода говорит, что если значение вставлено меньше заголовка, мы хотим, чтобы это новое значение было заголовком, а исходное значение заголовком было вторым значением в списке. Следовательно, oldHead - это ссылочная переменная для заголовка только для временного хранения значения. После этого head = n просто устанавливает заголовок (он же первый узел в списке) на новый узел, поэтому теперь вставляется первый узел. Затем head.next = oldHead устанавливает следующее значение в списке, равное исходному заголовку списка. Теперь вставленное значение стоит первым в списке, а исходный заголовок - вторым значением в списке.
if (prev == null) {
Node oldHead = head;
head = n;
head.next = oldHead;
break;
}
Этот фрагмент кода просто устанавливает связи, чтобы все переменные были связаны вместе.
//dont understand this either
prev.next = n;
n.next = current;
break;