Większość modyfikacji kodu jest dość banalna - wystarczy dodać porównanie na podstawie identyfikatora, aby przejść tylko przez listę, aż do węzła o identyfikatorze większym od nowego, który należy wstawić (lub dotrzeć do końca listy).
W tym momencie sytuacja staje się nieco skomplikowana: zanim "uświadomisz sobie", że osiągnąłeś właściwe miejsce na liście, już za jednym węzłem minąłeś (i na pojedynczo połączonej liście, nie ma sposobu, aby odejść plecy). Sposób na naprawienie tego jest całkiem prosty: przydziel nowy (pusty) węzeł i wstaw go po znalezionym zbyt dużym węźle. Skopiuj tę zbyt dużą zawartość węzła do nowo wstawionego, a następnie skopiuj dane nowego węzła do miejsca, które właśnie zostało opuszczone.
Należy jednak dodać, że wszystko to jest w większości kwestią dyskusyjną. Jeśli chcesz posegregować kolekcję przedmiotów, lista połączona jest zwykle bardzo kiepskim wyborem. Jeśli nie robisz czegoś takiego, jak praca domowa, w której nie masz wyboru, jak zrobić cokolwiek, co zostało ci przypisane do mózgu, poszukaj std::set
[Edytuj: lub std::multiset
, jeśli duplikaty są dozwolone - lub ewentualnie std::map
lub std::multimap
, jeśli chcesz mieć możliwość znalezienia węzła na podstawie identyfikatora] i zapomnieć o samodzielnym wdrożeniu.
Czy macie jakieś przemyślenia co do tego, jak można rozwiązać ten problem? Jeśli narysujesz połączoną listę na kartce papieru, możesz przejść przez kroki, które trzeba wykonać, aby wstawić nowe węzły w odpowiednich miejscach? Co próbowałeś i gdzie utknąłeś? Im więcej możesz wyjaśnić, co próbujesz, tym lepiej możemy pomóc Ci zrozumieć, jak rozwiązać ten problem. –
To jest dla jakiegoś zadania, prawda? Wiesz, że C++ ma listę połączoną i kilka innych kontenerów wbudowanych w standardową bibliotekę, tak? –