Zaimplementuj podstawowe operacje na listach dwukierunkowych:
void insert(int x, elem *&lista) {
elem* obw = new elem;
obw->dane = x;
obw->poprz = NULL;
if (lista) {
lista->poprz = obw;
obw->nast = lista;
lista = obw;
} else {
lista = obw;
lista->nast = NULL; //moz przyspiesz..
}
}
void insert(int x, int i, elem *&lista) {
elem* obw = new elem;
obw->dane = x;
if (i != 0) {
elem* pam = lista;
while (i > 0) {
pam = pam->nast; //wyjatek
i--;
}
pam->poprz->nast = obw;
obw->poprz = pam->poprz;
obw->nast = pam;
pam->poprz = obw;
} else {
if (lista) {
obw->nast = lista;
obw->poprz = NULL;
lista->poprz = obw;
lista = obw;
} else {
lista = obw;
obw->nast = NULL;
obw->poprz = NULL;
}
}
}
int remove(elem *&lista) {
elem* d = lista;
lista = lista->nast;
lista->poprz = NULL;
delete d;
}
int remove(int i, elem *&lista) {
elem* pam = lista;
elem* d = lista;
if (i != 0) {
while (i != 0) {
d = d->nast; //wyjatek
i--;
}
d->nast->poprz = d->poprz;
d->poprz->nast = d->nast;
lista = pam;
} else {
lista = lista->nast;
lista->poprz = NULL;
}
delete d;
}
Offline