一、说明
二、代码
main.cpp
#include <iostream>
#include "DoubleLinkedList.h"
using namespace std;
int main()
{
cout << "双向链表" << endl;
DoubleLinkedList intList;//创建新链表
DoubleLinkedNode *node_1 = new DoubleLinkedNode();//创建新节点
DoubleLinkedNode *node_2 = new DoubleLinkedNode();
DoubleLinkedNode *node_3 = new DoubleLinkedNode();
DoubleLinkedNode *node_4 = new DoubleLinkedNode();
DoubleLinkedNode *node_5 = new DoubleLinkedNode();
node_1->data = 10;
node_2->data = 20;
node_3->data = 30;
node_4->data = 40;
node_5->data = 50;
intList.Insert(node_1,intList.first);
intList.Insert(node_2,intList.first);
intList.Insert(node_3,intList.first);
intList.Insert(node_4,intList.first);
intList.Insert(node_5,intList.first);
intList.Delete(node_4);
cout<<intList.first->rlink->data<<endl;
cout<<intList.first->rlink->rlink->data<<endl;
cout<<intList.first->rlink->rlink->rlink->data<<endl;
cout<<intList.first->rlink->rlink->rlink->rlink->data<<endl;
// cout<<intList.first->rlink->rlink->rlink->rlink->llink->data<<endl;
return 0;
}
DoubleLinkedList.h
#ifndef _DOUBLELINKEDLIST_H
#define _DOUBLELINKEDLIST_H
#include <iostream>
using namespace std;
class DoubleLinkedList;//双向链表前置声明
/*双向链表节点*/
class DoubleLinkedNode//双向链表节点
{
friend class DoubleLinkedList;
public:
int data;//节点数据域
DoubleLinkedNode *llink;//节点左指针
DoubleLinkedNode *rlink;//节点右指针
};
/*双向链表类*/
class DoubleLinkedList
{
public:
DoubleLinkedList()//双向链表类的构造函数
{
first = new DoubleLinkedNode();//创建表头结构的first节点
first->llink = first->rlink = first;
}
void Insert(DoubleLinkedNode *,DoubleLinkedNode *);//新节点插入到节点的右边
void Delete(DoubleLinkedNode *);//删除节点
//private:
DoubleLinkedNode *first;//表头结构
};
/*双向链表类:插入函数*/
//newNode节点插入到x节点的右边
void DoubleLinkedList::Insert(DoubleLinkedNode *newNode,DoubleLinkedNode *x)
{
newNode->llink = x;
newNode->rlink = x->rlink;
x->rlink->llink = newNode;
x->rlink = newNode;
}
/*双向链表类:删除节点*/
void DoubleLinkedList::Delete(DoubleLinkedNode *x)
{
if(x == first)
{
cerr<<"Deletion of head node not permitted."<<endl;
}
x->llink->rlink = x->rlink;
x->rlink->llink = x->llink;
delete x;
}
#endif // _DOUBLELINKEDLIST_H