#include using namespace std; struct p{ int a; p * pNext; p * pPrev; }; int del (int to_delete, p * & pAnker); int main() { p *pAnchor, *pNew, *pLast; int i = 1; int tmp; cout << "Geben Sie 6 Zahlen ein (getrennt durch Leerzeichen): "; pAnchor = new p; cin >> tmp; pAnchor -> a = tmp; pAnchor -> pNext = pAnchor -> pPrev = NULL; pLast = pAnchor; while (i < 6) { pNew = new p; cin >> tmp; pNew -> a = tmp; pLast -> pNext = pNew; pNew -> pPrev = pLast; pLast = pNew; pLast -> pNext = NULL; i=i+1; } cout << "Geben Sie die zu loeschende Zahl ein: "; cin >> tmp; cout << del(tmp,pAnchor) << " Elemente geloescht!" << endl; // alle a-Instanzen von hinten beginnend ausgeben // ACHTUNG: pLast koennte durch Loeschen des letzten Elementes // ungueltig geworden sein, also manuell pLast aktualisieren pLast = pAnchor; if(pLast != NULL) while(pLast->pNext != NULL) pLast = pLast->pNext; cout << "Ausgabe von hinten nach Loeschvorgang: "; p* pHelp = pLast; tmp = 0; while(pHelp != NULL) { cout << pHelp->a << " "; pHelp = pHelp->pPrev; tmp++; } if(!tmp) cout << "Keine Elemente mehr in der Liste!"; cout << endl; return 0; } int del (int to_delete, p * & pAnker) { p *pSearch = pAnker; int count_del = 0; // Vorkommen von to_delete suchen und loeschen while(pSearch != NULL) { if(pSearch->a == to_delete) { p *pDelete = pSearch; // erstes Element zu loeschen if(pDelete->pPrev == NULL){ pAnker = pDelete->pNext; // wenn erstes Element nicht auch letztes if(pAnker != NULL) pAnker->pPrev = NULL; } // letztes Element zu loeschen else if(pDelete->pNext == NULL){ pDelete->pPrev->pNext = NULL; } // Element in der Mitte zu loeschen else{ pDelete->pPrev->pNext = pDelete->pNext; pDelete->pNext->pPrev = pDelete->pPrev; } pSearch = pSearch->pNext; delete pDelete; count_del++; } else pSearch = pSearch->pNext; } return count_del; }