typedef struct node { int data; struct node *next; } NODE;
NODE* add_head(NODE **phead, int data) {
NODE *new = (NODE *)malloc(sizeof(NODE));
new->data = data;
new->next = *phead;
*phead = new;
return new;
}
NODE* add_tail(NODE **phead, int data) {
NODE *p, *new = (NODE *)malloc(sizeof(NODE));
new->data = data;
new->next = 0;
if (*phead == 0) *phead = new;
else
{
for (p = *phead; p->next; p = p->next);
p->next = new;
}
return new;
}
У нас есть отдельный список, как показано выше в функциях. Узел состоит из типа данных int и указателя на следующий узел в списке. Мы определили две функции. Первый изменяет головной узел или добавляет новый головной узел перед предыдущим головным узлом. Вторая функция добавляет хвостовой узел (последний в списке). В основном, мы называем их, как:C - Одиночный список - передача указателя по значению vs по ссылке
NODE *head = 0;
NODE *c1 = add_head(&head, 1);
NODE *c2 = add_tail(&head, 3);
Теперь посмотрим на эту функцию:
NODE* add_after(NODE *node, int data) {
NODE *new = (NODE *)malloc(sizeof(NODE));
new->data = data;
new->next = node->next;
node->next = new;
return new;
}
Эта функция добавляет узел после узла аргумента. И, в основном, если мы хотим, чтобы добавить узел после c1 ранее определенного, мы называем функцию, как:
*c3 = add_after(c1, 4);
Мой вопрос: В чем разница между первыми двумя и третьей функции с точки зрения аргументов , В первых двух функциях мы имеем аргумент ** phead и в третьей функции, * node. Действительно ли нам нужно ** phead, почему мы не можем просто положить * phead и в основном называют это нравится:
NODE *c1 = add_head(head, 1);
Я надеюсь, вы поняли, что я имел в виду, я считаю, это трудно объяснить.
'УЗЕЛ * add_head (УЗЕЛ * phead, Int данных) {' ' NODE * новое = (УЗЕЛ *) таНос (SizeOf (УЗЕЛ));' ' New-> данные = данные;' ' new-> next = phead; ' ' phead = new; ' ' return new; ' '} ' Что произойдет, если бы у нас была эта функция? – A6SE
@ A6SE хорошо, вы сами увидите, если попытаетесь создать список, используя функцию add_head, а затем распечатайте его первый элемент. Лучше попробуйте, чем спекулировать (или верить, не видя). –
Изображение в разделе редактирования помогло мне понять: D Редактировать: не удается отправить изображения, но вот ссылка: https://scontent-fra3-1.xx.fbcdn.net/hphotos-xpf1/v/t35.0 -12/899637_10205653784815332_1271825706_o.jpg? о = 15e3ffd465e8c832690f0b6cae1a63dc & ае = 556D874C – A6SE