Wypisywanie elementów listy jednokierunkowej

0

Co jest nie tak w tym kodzie? Wyświetlany jest tylko pierwszy element. Wydaje mi się, że w momencie uzupełniania elementu innego niż pierwszy (gdy pierwszy jest już zajęty) trzeba zastosować coś w stylu przypisania: "pierwszy = ostatni", żeby lista się nie rozleciała. Tylko do końca nie wiem, w którym miejscu to dodać + może jeszcze jakieś modyfikacje potrzebne?

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

struct element {
    int dane;
    struct element *nast;
};

typedef struct element ELEMENT;
typedef ELEMENT *ADRES;

void Wypisz (ADRES pierwszy)
{
    ADRES pom = (ADRES)malloc(sizeof(ELEMENT));
    pom = pierwszy;
    while(pom != NULL)
    {
        printf("%d", pom->dane);
        pom = pom->nast;
    }
}

int main()
{
    ADRES pierwszy = NULL, ostatni = NULL, pom;
    int liczba;
    FILE *f = fopen("Plik.txt", "rt");
        if(f == NULL)
            {
                printf("Error\n");
                return 1;
            }
                while(fscanf(f, "%d", &liczba) == 1)
                {
                    pom = (ADRES)malloc(sizeof(ELEMENT));
                    pom->dane = liczba;
                    pom->nast = NULL;
                        if(pierwszy == NULL)
                        {
                            pierwszy = pom;
                            ostatni = pom;
                        }
                        else
                        {
                            pierwszy = ostatni;
                            ostatni->nast = pom;
                            ostatni = pom;
                        }
                }
    fclose(f);
    Wypisz(pom);
    return 0;
}
0

Trochę inaczej:

void printList(ADRES root) {
	ADRES *tmp = root;
	while (tmp) {
		//Do sth with *tmp
		tmp = tmp->nast;
	}
}
0

@Hodor: Nie Musisz, można i tak:

void printList(struct node * root) {
	for (; root; root = root->next)
		std::cout << root->data << " ";
}

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