c++双向链表自学笔记

双向链表(仅供自学,源码)

#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插入到x的右边,1x2 1p2 1y2	
	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;
}

猜你喜欢

转载自blog.csdn.net/qq_45347584/article/details/104139449
今日推荐