Связанный список (когда люди говорят связанный список, они обычно имеют в виду один связанный список) имеет ссылку на следующий узел и не имеет ссылки на предыдущий. Итак, представьте, что если вы вернете узел, который находится в середине списка, вы можете перейти к следующему и следующему полностью до конца, это хорошо. Проблема заключается в том, что вы не сможете перейти к предыдущему узлу, если у вас нет ссылки на него, что сделает его двойным связанным списком или если у вас есть указатель на head
первый узел в списке, который будет служить начать.
В вашем случае вы перемещаете узлы в начало списка, поэтому ваш код перемещает предыдущую головку в следующую и делает новый узел головным узлом.
EDIT:
head
должен быть передан по ссылке. val
должно быть передано по значению. Зачем? Для head
нам нужен адрес, чтобы мы могли сделать ссылку на него. Для val
, если мы передадим его по ссылке, адрес может быть повторно использован в функции вызывающей стороны, и мы не хотим, чтобы наши данные изменились.