Algoritmus a k-es elem egyszerűen összekapcsolt listáján való kereséshez a végén

Ez az algoritmus rekurzívan és nem rekurzívan valósítható meg. A rekurzív megoldások általában érthetőbbek, de kevésbé optimálisak. Például a probléma rekurzív végrehajtása majdnem fele rövidebb, mint a nem recursív, de O (n) szóközöket foglal el, ahol n az összekapcsolt listában szereplő elemek száma.







A probléma megoldásakor ne feledje, hogy kiválaszthatja a k értékét, így k = 1 átvitelkor kapjuk az utolsó elemet, 2 - az utolsó előtti, stb. Vagy válaszd ki, hogy k = 0 megfelel az utolsó elemnek.

Megoldás 1. A kapcsolt lista mérete ismert

Ha ismeretes a csatolt lista mérete, akkor a végén a k-es elem könnyen kiszámítható (hossza - k). Át kell menned a listán, és meg kell találnod ezt az elemet.

2. megoldás Rekurzív megoldás

Az ilyen algoritmus rekurzívan átadja a csatlakoztatott listát. Amikor elérte az utolsó elemet, az algoritmus elkezd számlálni és a számláló nullázódik. Minden lépés lépésenként növeli a számlálót. Amikor a számláló eléri a k ​​értéket, akkor a keresett elem megtalálható.







Ennek az algoritmusnak a végrehajtása rövid és egyszerű - elegendő az egész értéket a veremen keresztül átengedni. Sajnos a visszatérési utasítás nem tudja visszaadni a csomópont értékét. Szóval hogyan tudod ezt a nehézséget megoldani?

A megközelítés: ne tegyen vissza egy tételt

Nem tudsz visszaadni egy elemet, azonnal kinyomtatod, amint megtalálod. És a visszatérési nyilatkozatban adja vissza a számláló értékét.

A megoldás igaz, de a másik irányba megy.

B megközelítés: C ++ használata

A második módszer a C ++ használata, és az érték referenciaként való átadása. Ez a megközelítés nemcsak visszaadja a csomópont értékét, hanem a számláló frissítését a mutató hozzáadásával.

3. megoldás. Iteratív megoldás

Az iteratív megoldás bonyolultabb, de optimálisabb is. Két mutatót használhat - p1 és p2. Először is mindkét mutató a lista tetejére mutat. Ezután mozgassa a p2-t a k csomópontok előtt. Most mindkét mutatót egyszerre mozgatjuk. Amikor a p2 eléri a lista végét, a p1 a kívánt elemre mutat.