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