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, botów: 0