Lista jednokierunkowa C

0

To jest mój program który za każdym razem zwraca mi błąd gdy próbuje dodać coś do listy . Nie mam pojęcia czemu ??

Siedziałem cały wieczór i nic coś jest nie tak ale nie mogę wyhaczyć co ?

#include <stdio.h>
#include <stdlib.h>

struct n
{
	int x;
	struct n *next;
};
typedef struct n n;

void dodaj(n* head, int i);
void print(n* head);

void dodaj(n* head, int i)
{
	n *temp, *nowy;
	temp = head;
	
	while(temp != NULL)
		temp = temp->next;
		
	nowy = (n*)malloc(sizeof(n));
	nowy->x = i;
	nowy->next = NULL;
	temp->next = nowy;
}

void print(n* head)
{
	struct n *temp;
	temp = head;
	
	while(temp != NULL)
	{
		printf("%d \n" ,temp->x);
		temp = temp->next;
	}
}


int main(int argc, char *argv[])
{
	int w;
	n *head;
	
	head = (n*) malloc(sizeof(struct n));
	head->x = 1;
	head->next = NULL;
	
	for(;;)
	{
		
		scanf("%d" ,&w);
		dodaj(head,w);
		print(head);
		
	}
	
	return 0;
}
 
0
    while(temp != NULL)
        temp = temp->next;
   
    temp->next = nowy;

po wyjściu z pętli while temp jest nullem, więc temp->next wywala.

0

No właśnie mnie to strasznie dziwiło ale kod poniżej działa był w przykładzie w książce :

 
 void dodaj_do_listy (el_listy *lista, unsigned long liczba)
 {
   el_listy *wsk, *nowy;
   wsk = lista;
   while (wsk->next != NULL)
     { 
     wsk = wsk->next; /* przesuwamy wsk aż znajdziemy ostatni element */
     }
   nowy =(el_listy*) malloc (sizeof(el_listy));
   nowy->val = liczba;
   nowy->next = NULL;
   wsk->next = nowy; /* podczepiamy nowy element do ostatniego z listy */
 }
1
while(temp != NULL)

Twój kod.

while (wsk->next != NULL)

kod z książki.

Widzisz różnicę?

0

Cóż za trywialny błąd .... Dziękuję pięknie :)

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