Witam mam pytanie , dlaczego w funkcji while nie zmienia się *l, tylko l ?
void DNKL(lista ∗l, int i )
{
lista p = ( lista )malloc(sizeof( elListy ));
p−>klucz = i;
p−>nast = 0;
while ((∗ l ))
l = &(∗l)−>nast;
∗l = p;
}
Witam mam pytanie , dlaczego w funkcji while nie zmienia się *l, tylko l ?
void DNKL(lista ∗l, int i )
{
lista p = ( lista )malloc(sizeof( elListy ));
p−>klucz = i;
p−>nast = 0;
while ((∗ l ))
l = &(∗l)−>nast;
∗l = p;
}
Żeby dodawać element na koniec listy wcale nie musisz jej przewijać. Przechowuj po prostu pod ręką adres ostatniego elementu i kiedy będziesz chciał dołożyć coś na koniec to dopnij się do niego jako next
i zamień wskaźnik na ostatni element z tym, który właśnie wstawiles.
void DNKL(lista ∗l, int i )
{
lista p = ( lista )malloc(sizeof( elListy ));
p−>klucz = i;
p−>nast = 0; tu nadajesz ostatniemu elementowi 0
while (l->nast ) tu szukasz tego elementu zerowego - jezeli tak to ostatni
l = l->nast; jeżeli wyżej nie był 0 to przypisujesz adres elementu lisy - i tak do wyczerpania listy
l->nast = p; dodajesz nowy adres do listy
}
nie dawno przerabiałem to i raczej powinno to tak wygladac
@grzesiek51114
Akurat aktualnie w moim przypadku mogę używać tylko wskaźnika na początek listy, a w tym przypadku nie rozumiem dlaczego mam działać na l zamiast *l. Rozumiem ze do l przypisuje wartość znajdującą się pod *l. Tak samo jest w tym przypadku:
void UOeL(lista ∗l){ // wsk. na listę!
if(∗l == 0) return;
while((∗l)−>nast)
l = &(∗l)−>nast;
free (∗l );
∗l=0;
}
@złoty Terrorysta
Mój kod również działa i miałem taki podany na zajęciach, tylko główkuje nad tym jak się dzieje ze to działa :d
To chyba nie ma co główkować, tylko zaprząc debugger do pracy i prześledzić krok po kroku działanie programu, wartości zmiennych i adresy wskaźników.
Ponieważ wskaźnika l używasz do przewijania listy, przypisujesz do l kolejny element listy l->nast który przecież jest wskaźnikiem, a nie wiem jak przesuwać wskaźnik używając wartości *l a nie samego wskaźnika l. Poza tym ten zapis:
l = &(∗l)−>nast;
można zastąpić tym:
l = l->nast
bo to masło maślane, pobieramy referencję do wartości wskaźnika.