У меня есть вопрос о явно связанных списках в 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
