11.3.4. Stergerea unui nod dintr-o lista circulara simplu inlantuita (LCSI)
2020/03/06 in Programare in C
Functia csnci de mai jos permite stergerea unui nod precizat printr-o cheie de tip int dintr-o LSCI.
In cazul in care variabila ptrnod pointeaza chiar spre nodul care se sterge, convenim ca ptrnod sa pointeze spre nodul precedent celui sters, daca lista nu a devenit vida. In acest ultim caz, lui ptrnod i se atribuie valoarea 0.
Nodurile listei au tipul TNOD indicat in paragraful 11.3.2.
Dupa modelul de mai jos, se pot defini si alte functii pentru a sterge noduri dintr-o LCSI.
void TNOD *csnci(int c) {
/* strege nodul pentru care cheie = c. */
extern TNOD *ptrnod;
TNOD *p, *p1;
int n;
if (ptrnod == 0)
return; /* lista vida */
p = ptrnod;
do {
p1 = p;
p = p -> urm;
if (p -> cheie == c)
break;
} while (q != ptrnod);
if (p -> cheie != c) {
printf("nu exista un nod de cheie = %d\n", c);
return;
}
if (p == p -> urm) { /* lista are un singur nod */
ptrnod = 0;
}
else {
p1 -> urm = p -> urm;
if (p == ptrnod) /* se sterge nodul spre care pointeaza ptrnod */
ptrnod = p1;
}
elibnod(p);
}