Kezdőoldal » Számítástechnika » Programozás » Ha egy láncolt lista utolsó...

Ha egy láncolt lista utolsó előtti elemét át szeretném helyezni a második helyre, akkor milyen sorrendben irányítsam át a pointereket, hogy ez sikerüljön?

Figyelt kérdés

Lehetséges egyáltalán? Ha jól számoltam, összesen 6 pointert kellene átállítani (a lista duplán láncolt).

Próbálkoztam már egy csomó sorrenddel, de nem akar működni.



2017. nov. 18. 00:23
 1/10 anonim ***** válasza:
63%

Persze, bármelyik helyről bárhova átrakhatod. A lényeg, hogy csak olyan pointereket írj felül, amik vagy nem kellenek már, vagy megvannak máshol. Fontos a sorrend, különben menet közben elveszhetnek pointerek ill. elemek.


Mondjuk legyenek az elemek A-B-C-D-E, és az előző-következő pointerek 1 és 2.

Itt mondjuk a D elemet akarod kivenni és beszúrni az A után.


-A1,A2- -B1,B2- -C1,C2- -D1,D2- -E1,E2-


Elem törlés:

x = D // hogy legyen ami D-re mutat törlés után

E1 = C // E valójában a D2 által mutatott elem

C2 = E // C2 valójában a D1 által mutatott elem


Beszúrás:

x1 = A

x2 = B

B1 = x // vagy B lehet az A2 által mutatott elem

A2 = x

2017. nov. 18. 00:47
Hasznos számodra ez a válasz?
 2/10 anonim ***** válasza:
...Egyébként kezdhetnéd úgy is, hogy az A2-t rögtön D-re állítod, de akkor a B-t nem fogod megtalálni, szóval előbb-utóbb valamit menteni kell egy segédváltozóba.
2017. nov. 18. 00:49
Hasznos számodra ez a válasz?
 3/10 anonim ***** válasza:
Ja és persze ellenőrizni kell, hogy egy adott elem létezik-e egyáltalán. Ez a lista elején és végé érdekes, ha mondjuk nem megy körbe, hanem az első előtti és az utolsó utáni "null".
2017. nov. 18. 00:55
Hasznos számodra ez a válasz?
 4/10 A kérdező kommentje:
Köszi a segítséget! :)
2017. nov. 18. 11:24
 5/10 A kérdező kommentje:

Bocsi az újabb kérdés miatt, nem tudom követed-e még itt a hozzászólásokat, de időközben megváltoztattam a programomat vizuális okok miatt, és most már csak az utolsó elemet teszem a második helyre, ebben a sorrendben:

C2 = NULL

D1 = A

D2 = A2

B1 = D

A2 = D

Ahol A az első, B a második, C az utolsó előtti, D pedig az utolsó elem, és 1 az előző elemre, 2 pedig a következő elemre mutató pointer hasonlóan ahhoz, ahogyan te is jelölted.

Ezt a sorrendet én jónak tartom igazából, tehát csak egy megerősítés, vagy egy kijavítás kellene, ha valamit nagyon nem látnék jól.

Viszont valami baj mégis van, mert a program így kidob szegmentálási hibával, és csak ezen a részen lehet valami hibás.

2017. nov. 18. 21:28
 6/10 anonim ***** válasza:

C2 = NULL // Vigyázat, itt valami másnak még hivatkoznia kell D-re, különben D elvész, mint az elengedett lufi

D1 = A

D2 = A2 // Ennek semmi értelme, D2 B-re mutasson

B1 = D

A2 = D


De van itt egy nagyobb probléma is. Rossz gyakorlat az, ha ennyire speciális esetekhez csinálsz algoritmust. Csinálj általános függvényt törlésre és beszúrásra, és akkor olyan listával használhatod, amilyennel akarod.

2017. nov. 19. 10:11
Hasznos számodra ez a válasz?
 7/10 anonim ***** válasza:
2017. nov. 19. 10:12
Hasznos számodra ez a válasz?
 8/10 A kérdező kommentje:

A D2 = A2 alatt én is a B elemre gondoltam, csak nem tudtam máshogy leírni, a kódban is head->kov néven érem el a második elemet, ami tulajdonképpen A2. Vagy azt mondod, legyen inkább külön pointerem B-re?

Egyébként azért ilyen speciális ez az algoritmus, mert snake játékhoz készül, és úgy mozgatom, hogy az utolsó elemet a második helyre teszem (azért nem az elsőre, mert ott van a feje, és az kinézetben, és méretben is különbözik a törzselemtől).

2017. nov. 19. 10:58
 9/10 A kérdező kommentje:
Megoldottam! :) Az utolsó előtti elemet el kellett tárolnom egy külön pointerben, és így már jó.
2017. nov. 19. 11:40
 10/10 anonim ***** válasza:

"A D2 = A2 alatt én is a B elemre gondoltam"

Ja igen, én voltam figyelmetlen, bocsánat.

2017. nov. 19. 15:21
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!