@@ -228,24 +228,21 @@ void DSDoublyLL<T>::insert(int index, T data){
228228 return ;
229229 }
230230
231- DSNode<T>* newNode = new DSNode<T>(data);
232-
233- // ToDo: throw an "index out of bounds" error
234- DSNode<T>* current = head;
235- for (int i = 0 ; i < index - 1 ; i++){
236- current = current->next ;
231+ if (index == numIndexes){
232+ pushBack (data);
233+ return ;
237234 }
238235
239- newNode->next = current->next ;
240- newNode->prev = current;
236+ DSNode<T>* nodeBefore = getNodeAt (index - 1 );
241237
242- current-> next = newNode ;
238+ DSNode<T>* newNode = new DSNode<T>(data) ;
243239
244- if (newNode->next == nullptr ){
245- tail = newNode;
246- }else {
247- newNode->next ->prev = newNode;
248- }
240+ newNode->next = nodeBefore->next ;
241+ newNode->prev = nodeBefore;
242+
243+ nodeBefore->next = newNode;
244+
245+ newNode->next ->prev = newNode;
249246
250247 numIndexes++;
251248}
@@ -256,7 +253,41 @@ void DSDoublyLL<T>::insert(int index, T data){
256253 */
257254template <class T >
258255void DSDoublyLL<T>::remove(int index){
259- // ToDo: remove
256+ if (index == 0 ){
257+ DSNode<T>* temp = head->next ;
258+ delete head;
259+
260+ head = temp;
261+ head->prev = nullptr ;
262+
263+ numIndexes--;
264+ return ;
265+ }
266+
267+ if (index == numIndexes - 1 ){
268+ DSNode<T>* temp = tail->prev ;
269+ delete tail;
270+
271+ tail = temp;
272+ tail->next = nullptr ;
273+
274+ numIndexes--;
275+ return ;
276+ }
277+
278+ DSNode<T>* target = getNodeAt (index);
279+
280+ target->prev ->next = target->next ;
281+
282+ if (target->next != nullptr ){
283+ target->next ->prev = target->prev ;
284+ } else {
285+ tail = target->prev ;
286+ }
287+
288+ numIndexes--;
289+
290+ delete target;
260291}
261292
262293/* *
@@ -326,11 +357,7 @@ void DSDoublyLL<T>::popBack(){
326357template <class T >
327358int DSDoublyLL<T>::size()
328359{
329- int total = 0 ;
330- for (DSNode<T>* current = head; current != nullptr ; current = current->next ){
331- total++;
332- }
333- return total;
360+ return numIndexes;
334361}
335362
336363/* *
@@ -457,6 +484,8 @@ template <class T>
457484DSNode<T>* DSDoublyLL<T>::getNodeAt(int index) const {
458485 DSNode<T>* current;
459486
487+ // ToDo: throw an "index out of bounds" error
488+
460489 // set indexing to start from the closer end node
461490 if (index < 0 ){
462491 index = numIndexes + index;
0 commit comments