This is a corrected (I hope) version of Figure 5.13 from the Heileman text. template void SlList::Insert(const T& elm, int pos) { assert( (pos > 0) && (pos <= (length + 1) ) ); SlNode* prev_node; SlNode* current_node; SlNode* new_node = new SlNode(elm); // create the new node if (tail == NULL) // list is empty { tail = new_node; tail->next = tail; length++; return; } if (pos == 1) { new_node->next = tail->next; tail->next = new_node; } else { current_node = tail->next; // point to first node prev_node = current_node; current_node = current_node->next; for (int i=2; inext; } prev_node->next = new_node; // splice the new node into the list new_node->next = current_node; if (tail->next == new_node) // new_node went on the end tail = tail->next; } length++; }