Hogy kell egyirányú láncolt listából elemet törölni? (Free pascal )
Érdemes törlő eljárást írni rá, illetve osztályba csomagolni.
Ha az utolsó elemet akarod törölni akkor törlöd és a helyét nil-re állítod. Különben eltárolod a következő elem helyét. Adatát és mutatóját a törlendő elem helyére másold. És most jön a trükk: nem a törlendő elemet törlöd hanem az eltárolt következő elemet.
Ez azért kell mert nem tudod visszafele (hatékony futási idővel) megnézni a mutatókat.
Például legyen egy ilyen (sematikusan) láncolt listánk:
adat1 -> adat2 -> adat3 -> adat4 -> adat5 -> nil
Az adat3-on állok és törölni akarom. Adat3 mutatóját és adatát felülírom adat4-ével,( de megjegyzem hogy az eredeti adat4 hol van.)
Ekkor adat5-re 2 adat4 is mutat.
adat1 -> adat2 -> adat4(másolat) -> adat5 adat4 -> adat5 -> nil
Az eredeti adat4-et törlöm. És lesz
adat1 -> adat2 -> adat4(másolat) -> adat5 -> nil
lista. (A másolat adat4 az megkülönböztethetetlen a volt eredeti adat4-től)
Ha láncolt listánál kétségeid vannak, akkor nagyon egyszerű a módszer: rajzolni kell.
Láncolt listából törlés például nagyon egyszerű: megállsz a törlendő elem előtt (tehát ha az aktuális elem next-je a törlendő), elmented a nextet, a next nextjével felülírod az aktuális nextet, aztán törlöd a mentett mutatót.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!