В двух примерах кода, приведенных ниже, добавляется node вверху связанного списка. Но в то время как в первом примере кода используется двойной указатель, во втором примере кода используется один указатель
пример кода 1:
struct node* push(struct node **head, int data)
{
struct node* newnode = malloc(sizeof(struct node));
newnode->data = data;
newnode->next = *head;
return newnode;
}
push(&head,1);
пример кода 2:
struct node* push(struct node *head, int data)
{
struct node* newnode = malloc(sizeof(struct node));
newnode->data = data;
newnode->next = head;
return newnode;
}
push(head,1)
Обе стратегии работают. Тем не менее, многие программы, которые используют связанный список, используют двойной указатель для добавления нового node. Я знаю, что такое двойной указатель. Но если одного указателя было бы достаточно, чтобы добавить новый node, почему многие реализации полагаются на двойные указатели?
Есть ли случай, когда один указатель не работает, поэтому нам нужно перейти на двойной указатель?