Source of ListingC4-3.cpp


  1: //  Created by Frank M. Carrano and Timothy M. Henry.
  2: //  Copyright (c) 2017 Pearson Education, Hoboken, New Jersey.

  4: // Listing C4-3

  6: template<class ItemType>
  7: bool LinkedList<ItemType>::insert(int newPosition,
  8:                                   const ItemType& newEntry)
  9: {
 10:    bool ableToInsert = (newPosition >= 1) &&
 11:                        (newPosition <= itemCount + 1);
 12:    if (ableToInsert)
 13:    {
 14:       // Create a new node containing the new entry
 15:       auto newNodePtr = std::make_shared<Node<ItemType>>(newEntry);
 16:       
 17:       // Attach new node to chain
 18:       if (newPosition == 1)
 19:       {
 20:          // Insert new node at beginning of chain
 21:          newNodePtr–>setNext(headPtr);
 22:          headPtr = newNodePtr;
 23:       }
 24:       else
 25:       {
 26:          // Find node that will be before new node
 27:          auto prevPtr = getNodeAt(newPosition – 1);
 28:          
 29:          // Insert new node after node to which prevPtr points
 30:          newNodePtr–>setNext(prevPtr –>getNext());
 31:          prevPtr–>setNext(newNodePtr);
 32:       } // end if
 33:       
 34:       itemCount++; // Increase count of entries
 35:    }  // end if
 36:    
 37:    return ableToInsert;
 38: }  // end insert