Lista jednokierunkowa dodawanie na koniec

0

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;
 }

 
0

Ż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.

0
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 
0

@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; 
 }
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

0

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.

0

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.

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