Представьте себе случай, когда вам нужно внести определенные изменения, и эти изменения должны отразиться обратно в вызывающей функции.
Пример:
void swap(int* a,int* b){
int tmp=*a;
*a=*b;
*b=tmp;
}
int main(void){
int a=10,b=20;
// To ascertain that changes made in swap reflect back here we pass the memory address
// instead of the copy of the values
swap(&a,&b);
}
Аналогично передаем адрес памяти главы списка.
Таким образом, если какой-либо узел добавлен и значение значения заголовка изменено, то это изменение отражает ответ, и нам не нужно вручную сбрасывать заголовок внутри вызывающей функции.
Таким образом, этот подход уменьшает вероятность утечек памяти, поскольку мы потеряли бы указатель на недавно выделенный узел, если бы мы забыли обновить Head в вызывающей функции.
Кроме того, второй код будет работать быстрее, поскольку при копировании и возврате не тратится время, поскольку мы работаем непосредственно с памятью.