4. Variations: Doubly-Linked Lists

4.1. addBefore: Singly Linked
4.2. addBefore: Doubly Linked
4.3.

By modifying the node structure:

template <typename Data>
struct DListNode
{
  Data data;
  DListNode<Data>* prev;
  DListNode<Data>* next;

  DListNode() {next = prev = 0;}
  DListNode (const Data& d, DListNode<Data>* prv = 0, DListNode<Data>* nxt = 0)
    : data(d), next(nxt), prev(prv)
  {}
};

we can