Mi a probléma ezzel a C függvénnyel?
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.)
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
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!