An alternative to arrays, linked lists rely heavily on pointers and dynamically allocated memory. Unlike arrays, storage of linked lists need not be contiguous.
The idea: for each data item, store both the data and a pointer to the next data item (and the next pointer).
For the specification of the StringList class using linked lists, see string-list.h. For the implementation see string-list.C.
temp = new ListItem
temp->val = entry
A->next = C; // A->next swings from B to C
C->prev = A;
B->prev = C; // B->prev swings from A to C
C->next = B;