Dlaczego tak się dzieje, gdy staramy się stworzyć jedno połączenielista robimy Head NULL w klasie i nie robimy Next of the Head jako Null. W funkcjach dotyczących połączonych list dlaczego robimy Next węzłów Null i nie robimy Node Null?
Odpowiedzi:
0 dla odpowiedzi № 1Aby uniknąć marnotrawstwa. Węzeł listy jest przeznaczony do przechowywania elementu wewnątrz niego. Wyobraź sobie, że w proponowanym scenariuszu mieliśmy pustą listę *
oznacza głowę listy. Zaczynamy od:
[*???]->NULL
Gdzie ???
byłaby po prostu fikcyjną zmienną dla nieużywanego elementu. Już marnujemy węzeł listy, gdy możemy po prostu to zrobić:
*NULL
Podobnie, jeśli sprawdzimy niepustą listę, możemy mieć w przypadku:
[*123]->[456]->[789]->[???]->NULL
... kiedy moglibyśmy po prostu:
[*123]->[456]->[789]->NULL
Oczywiście możesz to zwiększyć, aby nadpisaćta fikcyjna zmienna, gdy rozmiar listy zmienia się od 0 do 1, ale teraz wymaga dodatkowych rozgałęzień i tak dalej, w efekcie otrzymujemy bardziej złożone instrukcje i nakład pracy.
Robiąc to, naprawdę niewiele można zyskać, a potencjalnie dużo do stracenia.
W funkcjach dotyczących połączonych list dlaczego robimy Next of węzły zerowe i nie powodują, że węzeł jest pusty?
Nie rozumiałem tej części. Jeśli mówimy o umieszczeniu nowego węzła na liście, na przykład możemy to mieć
[new node: 456]->??? [*123]->NULL
Następnie wskazujemy na głowę:
[new node: 456]->[*123]->NULL
... a następnie skieruj głowę na nowy węzeł.
[*456]->[123]->NULL
Zwykle więc nie powinno być czasów, w których ustawiasz następny wskaźnik węzła na null, chyba że jest on skierowany do głowy, która jest zerowa, lub w odpowiedzi na usunięcie ogona.