双方向連結リスト

#include <iostream>
#include <string>
#include <vector>
using namespace std;
struct Node {
    Node *prev, *next;
    string name;
    Node(string name_ = ""): 
      prev(NULL), next(NULL), name(name_) {}
};
Node* nil;
void init(){
    nil = new Node();
    nil->prev = nil;
    nil->next = nil;
}
void printList(){
    Node* cur = nil->next;
    for(; cur!=nil; cur=cur->next){
        cout << cur->name << " -> ";
    }
    cout << endl;
}
void insert(Node* v, Node* p=nil){
    v->next = p->next;
    p->next->prev = v;
    p->next = v;
    v->prev = p;
}
void erase(Node *v){
    if(v==nil) return;
    v->prev->next = v->next;
    v->next->prev = v->prev;
    delete v;
}
int main(){
    init();
    vector<string> names = {"yamamoto","watanabe","ito","takahashi","suzuki","sato"};
    Node *watanabe;
    for (int i=0;i<(int)names.size();++i){
        Node* node = new Node(names[i]);
        insert(node);
        if(names[i]=="watanabe") watanabe = node;
    }
    cout << "before: ";
    printList();
    erase(watanabe);
    cout << "after: ";
    printList();
}