bool CNode::remove(int index) { if( index<0 || index>=mSize ) { printf("Error, element %d doesn't exist\n", index); return false; } CData * curElement; if( mSize==1 ) { curElement = mFirst; mLast = 0; mFirst = 0; delete curElement; } else if( index == mSize-1 ) { curElement = mLast; mLast = mLast->getPrevious(); mLast->setNext( 0 ); delete curElement; } else if ( index==0 ) { curElement = mFirst; mFirst = mFirst->getNext(); mFirst->setPrevious( 0 ); delete curElement; decIndexses(mFirst); } else { curElement = mFirst->getNext(); while ( curElement ) { if ( curElement->getIndex() == index ) { curElement->getPrevious()->setNext( curElement->getNext() ); curElement->getNext()->setPrevious( curElement->getPrevious() ); decIndexses(curElement->getNext()); delete curElement; break; } curElement = curElement->getNext() ; } } mSize--; return true; }