listtools.h #ifndef LISTTOOLS_H #define LISTTOOLS_H namespace LinkedListSavitch ... { template<class T> class Node ...{ private: T data; Node<T> *link; public: Node()...{}; Node(const T& theData,Node<T>* theLink):data(theData),link(theLink)...{} Node<T>* getLink() const...{return link;} const T getData() const ...{return data;} void setData(const T& theData)...{data=theData;} void setLink(Node<T>* pointer)...{link=pointer;} }; template<class T> void headInsert(Node<T>*& head,const T& theData); //前提条件:指针变量head指向 //链表的头节点. //执行结果:一个包含数据theData的新节点 //被添加到链表的头部 template<class T> void insert(Node<T>* afterMe,const T& theData); //前提条件: afterMe指向链表中的某个节点。 //执行结果: 一个包含数据theData的新节点被添加到链表中afterMe所指向的 //节点之后。 template<class T> void deleteNode(Node<T>* before); //前提条件:指针before所指向的节点不是链表的最后一个节点。 //执行结果:指针before所指向的下一个节点已经从链表删除, //并且相应的内存交还给自由堆。 template<class T> void deleteFirstNode(Node<T>*& head); //前提条件:指针head指向链表的第一个节点, //并且链表中至少有一个节点。 //执行结果:指针head所指向的节点已经从链表中删除, //并且相应的内存交还给自由堆。 template<class T> Node<T>* search(Node<T>* head,const T& target); //前提条件:指针head指向链表的头节点。 //最后一个节点中的指针变量值为NULL。 //==为类型T定义。 //(==操作符用作判断是否相等的准则)。 //如果链表为空,则head等于NULL. //返回一个指针,该指针指向数据等于target的第一个节点。 //如果没有节点等于target, //则函数返回NULL。} // LinkListSavitch #endif // LISTTOOLS_H listtools.cpp #include " listtools.h " #include < cstddef > namespace LinkedListSavitch ... { template<class T> void headInsert(Node<T>*& head,const T& theData) ...{ head=new Node<T>(theData,head); } template<class T> void insert(Node<T>* afterMe,const T& theData) ...{ afterMe->setLink(new Node<T>(theData,afterMe->getLink())); } template<class T> void deleteNode(Node<T>* before) ...{ Node<T> *discard; discard=before->getLink(); before->setLink(discard->getLink()); delete discard; } template<class T> void deleteFirstNode(Node<T>*& head) ...{ Node<T> *discard; discard=head; head=head->getLink(); delete discard; } //使用cstddef; template<class T> Node<T>* search(Node<T>* head,const T& target) ...{ Node<T>* here=head; if(here==NULL)//如果是空链表 ...{ return NULL; } else ...{ while (here->getData()!=target && here->getLink()!=NULL) here=here->getLink(); if(here->getData()==target) return here; else return NULL; } }} // LinkedListSavitch TestList.cpp #include < iostream > using std::cout; using std::cin; using namespace std;#include " listtools.h " #include " listtools.cpp " using namespace LinkedListSavitch; int main( char * EventArgs) ... { Node<int> *head=new Node<int>(1,NULL); /**//* head->setData(1); head->setLink(NULL);*/ headInsert(head,2); insert(head,3); //headInsert(head,4); Node<int> *display=head; while (display->getLink()!=NULL) ...{ cout<<display->getData()<<" "; display=display->getLink(); } int f; cin>>f; return 0;}