单链表的一些操作
Link .h 文件
template <class T>
class CLink
{
public:
T data;
CLink<T>* next;
public:
CLink(T data, CLink<T>* next);
// virtual ~CLink();
};
Link .cpp文件
#include "Link.h"
template <class T>
CLink<T>::CLink(T data, CLink<T> *next)
{
this->data = data;
this->next = next;
}
LinkList.h 文件
#include "Link.cpp"
template <class T>
class CLinkList
{
private:
CLink<T>* head, * tail;
public:
void showList(); //输出链表
void reversList(); //链表逆置
CLinkList(T nNodes); //带参数的构造函数
virtual ~CLinkList();
void Delete(int min, int max); //删除从min到max中间的结点
};
LinkList.cpp 文件
#include "LinkList.h"
#include <iostream>
using namespace std;
//构造函数
template <class T>
CLinkList<T>::CLinkList(T nNodes)
{
if( nNodes <=0 )
{
this->head = this->tail = NULL;
return;
}
CLink<T>* pLink = new CLink<T>(nNodes,NULL);
this->head = this->tail = pLink;
for( int i=1; i<nNodes; i++ )
{
pLink->next = new CLink<T>(nNodes+i,NULL);
pLink = pLink->next;
}
this->tail = pLink;
}
//动态释放掉结点
template <class T>
CLinkList<T>::~CLinkList()
{
CLink<T>* pLink = NULL;
while( this->head != NULL )
{
pLink = this->head;
this->head = this->head->next;
delete pLink;
}
}
//逆置链表
template <class T>
void CLinkList<T>::reversList()
{
if( this->head == NULL ){
cout << "wrong" << endl;
return;
}
CLink<T> *p , *pNext;
this->tail = this->head;
p = this->head->next;
this->head->next = NULL;
while( p!=NULL )
{
pNext = p->next;
p->next = this->head;
this->head = p;
p = pNext;
}
}
//输出链表
template <class T>
void CLinkList<T>::showList()
{
if( this->head == NULL )
{
cout << " The list is empty" << endl;
return;
}
CLink<T> *pLink = this->head;
while( pLink != this->tail )
{
cout << pLink->data << "->";
pLink = pLink->next;
}
cout << pLink->data << endl;
}
//删除
template <class T>
void CLinkList<T>::Delete(int min, int max)
{
CLink<T> *temp, *t,*a;
t = this->head;
temp = this->head->next;
while( temp != this->tail && temp->data <= min )
{
temp = temp->next;
t = t->next;
}
// cout << temp->data << endl;
// cout << t->data << endl;
while ( temp != NULL)
{
if( temp->data < max )
{
a = temp;
temp = temp->next;
t->next = temp;
//cout << temp->data << endl;
delete a;
}
else
break;
}
}
删除指定元素的结点
template <class T>
void CLinkList<T>::deleteEx( T value ){
CLink<T>* temp = head;
if( head->data == value ){ //当删除元素是首个结点
head = head->next;
delete temp;
return;
}
while( temp ){
CLink<T>* q = temp->next;
if( q->data == value ){
temp->next = q->next;
delete q;
return;
}
temp = temp->next;
}
//循环结束 = 还没有找到删除结点 代表非法删除点
cout <<" 非法删除点" << endl;
}
Test.cpp
#include "LinkList.cpp"
int main(int argc, char* argv[])
{
CLinkList<int> lnkList1(10);
//链表逆置
lnkList1.showList();
lnkList1.reversList();
lnkList1.showList();
return 0;
}
运行效果:
CLinkList<int> linkList2(11);
linkList2.showList();
linkList2.Delete(4,6);
linkList2.showList();