双向链表(仅供自学,源码)
#include<iostream>
using namespace std;
class doublelist;
class doubleNode{
friend class doublelist;
public:
int data;
doubleNode *llink, *rlink;
};
class doublelist{
public:
doublelist(){
First = new doubleNode();
First->llink = First->rlink = First;
}
void Insert(doubleNode*, doubleNode*);
void Delete(doubleNode*);
public:
doubleNode *First;
};
void doublelist::Insert(doubleNode*p, doubleNode*x){
p->llink = x;
p->rlink = x->rlink;
x->rlink->llink = p;
x->rlink = p;
}
void doublelist::Delete(doubleNode *X){
if (X == First)
cerr << "not delete" << endl;
else {
X->llink->rlink = X->rlink;
X->rlink->llink = X->llink;
delete X;
}
}
int main(){
doublelist intlist;
doubleNode *Node1, *Node2, *Node3, *Node4,*Node5;
Node1 = new doubleNode();
Node2 = new doubleNode();
Node3 = new doubleNode();
Node4 = new doubleNode();
Node5 = new doubleNode();
Node1->data = 10;
Node2->data = 20;
Node3->data = 30;
Node4->data = 40;
Node5->data = 100;
intlist.Insert(Node1, intlist.First);
intlist.Insert(Node2, intlist.First);
intlist.Insert(Node3, intlist.First);
intlist.Insert(Node4, intlist.First);
intlist.Insert(Node5, intlist.First);
intlist.Delete(Node3);
std::cout << intlist.First->rlink->data << std::endl;
std::cout << intlist.First->rlink->rlink->data << std::endl;
std::cout << intlist.First->rlink->rlink->rlink->data << std::endl;
std::cout << intlist.First->rlink->rlink->rlink->rlink->data << std::endl;
std::cout << intlist.First->rlink->rlink->rlink->rlink->rlink->data << std::endl;
return 0;
}