указатель на указатели для односвязного списка в C

У меня есть вопрос о явно связанных списках в C. Я создал связанный список с кодом, показанным ниже:

#include <stdio.h> #include <stdlib.h> struct node { int data; struct node* next; }; struct node *mknode(int data) { struct node* np=malloc(sizeof(struct node)); np->data=data; np->next=NULL; return np; } struct node * insert (struct node* list,int data) { struct node *np; struct node*curr=list; struct node* prev=NULL; np=mknode(data); for(;curr &&data<curr->data;curr=curr->next ) prev=curr; np->next=curr; if(prev) prev->next=np; else list=np; return list; } int main() { struct node* head; head=malloc(sizeof(struct node)); head=insert(head,7); head=insert(head,2); head=insert(head,4); printf(«%d»,head->data); printf(«%d»,head->next->data); printf(«%d»,head->next->next->data); return 0; }

Однако во время поиска в Интернете я понял, что двойной указатель используется для создания связанного списка вместо обычного указателя. Я имею в виду struct node **list , а не struct node * list . Интересно, почему ? Какой из них правильный, и если оба из них верны, в чем разница между ними, я использовал свою реализацию с основным образцом, который я написал здесь, и он работает нормально, но я не знаю, почему я должен использовать указатель на указатели? Заранее спасибо.

head=malloc(sizeof(struct node)); голова неправильно инициализирована.   —  person caesar    schedule 06.08.2013

@PeterMiehle Я не узнаю вопрос, который вы здесь указали. Извините за дубликат, но я не делал этого для дублирования цели.   —  person caesar    schedule 06.08.2013

Источник: ledsshop.ru

Стиль жизни - Здоровье!