Lista jednokierunkowa w C

0

Witam
Mam pytanie odnośnie pewnego kodu w C

Lista * ListaWstaw(Lista* head, int a);

int main()
{
	Lista *tmp;
	Lista *head;
	Lista *element=malloc(sizeof(Lista));
	element->a=1;
	element->next=NULL;
	head=element;
	head = ListaWstaw(head,2);
	head = ListaWstaw(head,3);
	head = ListaWstaw(head,4);
	head = ListaWstaw(head,5);
	head = ListaWstaw(head,6);
	for(tmp=head;tmp!=NULL;tmp=tmp->next)
		printf("%d ",tmp->a);

	getch();
	return 0;
}

Lista * ListaWstaw(Lista *head, int a)
{
	Lista *temp=(Lista*)malloc(sizeof(Lista));
	if(temp==NULL)
	{
		printf("Nie mozna przydzielic pamieci\n");
		return 1;
	}
	temp->a=a;
	temp->next=head;
	head=temp;
	return head;
}

ten kod jest w porządku w funkcji main mogę wylistować elementy listy
wcześniej próbowałem robić to tak:

int ListaWstaw(Lista* head, int a);

int main()
{
	Lista *tmp;
	Lista *head;
	Lista *element=malloc(sizeof(Lista));
	element->a=1;
	element->next=NULL;
	head=element;
	ListaWstaw(head,2);
	ListaWstaw(head,3);
	ListaWstaw(head,4);
	ListaWstaw(head,5);
	ListaWstaw(head,6);
	for(tmp=head;tmp!=NULL;tmp=tmp->next)
		printf("%d ",tmp->a);

	getch();
	return 0;
}

int ListaWstaw(Lista *head, int a)
{
	Lista *temp=(Lista*)malloc(sizeof(Lista));
	if(temp==NULL)
	{
		printf("Nie mozna przydzielic pamieci\n");
		return 1;
	}
	temp->a=a;
	temp->next=head;
	head=temp;
	return 0;
}

w tej wersji nie mogłem wylistować wartości elementów listy. Wskaźnik head po wyjściu z funkcji ListaWstaw zawsze wskazywał na pierwszy element.
Myślałem, że w przypadku przekazywania wskaźnika do funkcji ListaWstaw head zawsze będzie wskazywał na kolejno wstawiany element. Dlaczego do funkcji ListaWstaw muszę przekazywać wksaźnik head, dlaczego muszę zwracać wskaźnik head z funkcji ListaWstaw i przypisywać go do head w funkcji main()

0

Powinieneś przekazywać wskaźnik na wskaźnik.

int ListaWstaw(struct Lista **head, int a)
{
    struct Lista *temp=(struct Lista*)malloc(sizeof(struct Lista));
    temp->a=a;
    temp->next= *head;
    *head = temp;
    return 0;
}

i w mainie wywołanie:

ListaWstaw(&head,2);

1 użytkowników online, w tym zalogowanych: 0, gości: 1