вставка узла в связанный список в c

Некоторые, пожалуйста, объясните

new_node->next = (*head_ref);
(*head_ref) = new_node;

это в приведенном ниже коде

/* Utility function to insert a node at the beginning */
void push(struct node **head_ref, int new_data)
{
    struct node *new_node = (struct node *) malloc(sizeof(struct node));
    new_node->data = new_data;
    new_node->next = (*head_ref);
    (*head_ref) = new_node;
}

person san45    schedule 05.10.2013    source источник
comment
Указатель заголовка изменяется при каждом нажатии, поэтому его необходимо передавать по адресу (и, таким образом, разыменовывать его для получения и установки его значения). Распространенной альтернативой является простое использование возвращаемого значения функции в качестве нового указателя заголовка. (и не приводить malloc).   -  person WhozCraig    schedule 05.10.2013
comment
Прочтите о разнице между передачей аргументов по значению и передачей аргументов по ссылке.   -  person Some programmer dude    schedule 05.10.2013
comment
Возможный дубликат: stackoverflow.com/questions/19194224/   -  person Sadique    schedule 05.10.2013
comment
в чем преимущество передачи аргумента по ссылке?   -  person san45    schedule 05.10.2013


Ответы (2)


Вот как простой узел добавляется в начало связанного списка в C. Код содержит только ссылку на заголовок, и когда добавляется новый узел, он добавляется в начало, а вновь вставленный узел считается новым. глава.

В вашем коде первая строка добавляет новый узел в начало. Это путем присоединения текущего списка (указанного заголовком) к новым узлам рядом.

Вторая строка помечает новый узел как заголовок списка.

Пожалуйста, взгляните на приведенную ниже ссылку для подробного графического объяснения приведенной выше логики.

http://www.thelearningpoint.net/computer-science/data-structures-singly-linked-list-with-c-program-source-code

person joe    schedule 05.10.2013

Именно то, что говорится в комментарии. Вставляет новый узел в начало и обновляет head_ref, чтобы он указывал на новое начало.

person Sorin    schedule 05.10.2013