#include <iostream>
using namespace std;
template <class T> class DblList;
template <class T>
struct DblNode
{
friend class DblList<T>;
public:
DblNode(T &dt) :data(dt) {}
DblNode() {}
//private:
T data;
DblNode *lLink;
DblNode *rLink;
};
template <class T>
class DblList
{
public:
DblList()
{
first = new DblNode<T>();
first->lLink = first->rLink = first;
};
DblNode<T> * getFirst()
{
return first;
}
//在p1的右边插入p2
void Insert(DblNode<T> * p1, DblNode<T> * p2);
void Delete(DblNode<T> * p);
private:
DblNode<T> *first;
};
template <class T>
void DblList<T>::Insert(DblNode<T> * p1, DblNode<T> * p2)
{
p2->lLink = p1;
p2->rLink = p1->rLink;
p1->rLink->lLink = p2;
p1->rLink = p2;
}
template <class T>
void DblList<T>::Delete(DblNode<T> * p)
{
if (p == first)
return;
p->lLink->rLink = p->rLink;
p->rLink->lLink = p->lLink;
delete p;
}
int main()
{
DblList<int> iDl;
int a1 = 10, a2 = 20, a3 = 30, a4 = 40;
DblNode<int> *node1 = new DblNode<int>(a1);
DblNode<int> *node2 = new DblNode<int>(a2);
DblNode<int> *node3 = new DblNode<int>(a3);
DblNode<int> *node4 = new DblNode<int>(a4);
iDl.Insert(iDl.getFirst(),node1);
iDl.Insert(iDl.getFirst(), node2);
iDl.Insert(iDl.getFirst(), node3);
iDl.Insert(iDl.getFirst(), node4);
cout<< iDl.getFirst() ->rLink->data<<endl;
cout << iDl.getFirst()->rLink->rLink->data << endl;
cout << iDl.getFirst()->rLink->rLink->rLink->data << endl;
cout << iDl.getFirst()->rLink->rLink->rLink->rLink->data << endl;
cout << endl << endl;
iDl.Delete(node1);
iDl.Delete(node4);
cout << iDl.getFirst()->rLink->data << endl;
cout << iDl.getFirst()->rLink->rLink->data << endl;
//cout << iDl.getFirst()->rLink->rLink->rLink->data << endl;
return 0;
}
演算結果: