// ------DoublyLinkedList.h------templateclass DNode{private: // 指向左、右结点的指针 DNode * left; DNode * right;public: // data为公有成员 T data; // 构造函数 DNode(void); DNode(const T& item); // 改变表的方法 void InsertRight(DNode * p); void InsertLeft(DNode * p); DNode * DeleteNode(void); // 取得指向左、右结点的指针 DNode * NextNodeRight(void) const; DNode * NextNodeLeft(void) const;};
// ------DoublyLinkedList.cpp------#include "DoublyLinkedList.h"// 构造函数,创建一个空表,并初始化其data域templateDNode ::DNode(const T& item){ // 建立一个指向自身的结点并初始化data域 left = right = this; data = item;}// 将结点p插入到双向链表中当前结点右边template void DNode ::InsertRight(DNode * p){ // 将p和当前结点的右后继结点相连 p->right = right; right->left = p; // 将p的左边和当前结点相连 p->left = this; right = p;}// 将结点p插入到当前结点左边template void DNode ::InsertLeft(DNode * p){ // 将p和当前结点的左后继结点相连 p->left = left; left->right = p; // 将p的右边与当前结点相连 p->right = this; left = p;}// 从链表中删除当前结点并返回其地址template DNode * DNode ::DeleteNode(void){ // 将左结点的右指针指向右结点 left->right = right; // 将右结点的左指针指向左结点 right->left = left; // 返回当前节点指针 return this;}
版权声明:本文博主原创文章。博客,未经同意不得转载。