Kezdőoldal » Számítástechnika » Programozás » Mi a probléma ezzel a C...

Mi a probléma ezzel a C függvénnyel?

Figyelt kérdés

[link]


A linken megtalálható a kód részlet.


Egy doubly linked listában akarok két Nodeot kicserélni.


Ha az egyik Node előtt semmi nincs, azaz az előtte lévő NULL, akkor szimplán eltűnik a linked listából. Ha meg a 2. és 3. elemet akarom kicserélni egy végtelen loopot kezd el kiírni a program :D


Nem értem mi lehet a hiba.


(A ki írás egy külön függvény, ahol az első Nodeból elindulok és a végéig elmegyek és minden elemet kiírok.)



2018. okt. 25. 16:59
 1/1 anonim ***** válasza:

Elég sok probléma van vele, ami azt illeti.


- Általános eset, N1, N2 nem szomszádosak, és mindkettőnek van szomszédja mindkét oldalon:

Ami itt hiányzik, hogy elfelejted a node-ok rákövetkező elemének átállítani az előző elemét. Az N2 eredeti rákövetkezőjének előző elme továbbra is N2 marad, és ugyanez az N1-el is.


- Speciális eset, N1 előzője NULL, N1, N2 nem szomszédosak:

Itt mivel N1-nek a prevje NULL, így még eggyel kevesebb visszahivatkozást állítasz be, gyakorlatilag csak az N1 és N2 szomszédjait állítod be, de a szomszádok oldaláról ezt már nem csinálod meg (egyetlen kivétel az N2->prev->next)


- Speciális eset, N1,N2 szomszádosak, mindkettőnek van kéts zomszádja:

Na itt mászik el nagyon a téma, ugyanis mit csinál az alábbi kód:

node2->previous->next = node1;


Nade a node2->previous, az a node1, tehát a node1 nextjéra beállítod a node1-et. Kész is a baj.


Itt a nyers jegyzetem a három esetről, ha segít:

==COMMON CASE==


=Model=

N1:

next: B

prev: A


N2:

next: D

prev: C


=GRAPH=

A-N1-B ... C-N2-D


=CHANGES=

A->next = N2

C->next = N1


N1->prev = C

N1->next = D


N2->prev = A

N2->next = B


B->prev: N1

D->prev: N2



==SPECIAL CASE: N1 NO PREV==


=Model=

N1:

next: B

prev: NULL


N2:

next: D

prev: C


=GRAPH=

N1-B ... C-N2-D


=CHANGES=

C->next: N1


N1->prev: C

N1->next: D


N2->prev: NULL

N2->next: B



==SPECIAL CASE: N1-N2 ADJACENT==


=Model=

N1:

next: N2

prev: A


N2:

next: B

prev: N1


=GRAPH=

A-N1-N2-B


=CHANGES=

A->next: N2

N1->next: N2


N1->prev: N1

N1->next: B


N2->prev: A

N2->next: N2

2018. okt. 25. 19:55
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!