用类模板实现单链表

 代码是自己编写,供参考

#include <iostream>
using namespace std;


template <class T>
class Node
{
public:
	T data;
	Node *next;
};


template <class T>
class Linklist
{
private:
	Node<T> *head;
	int size;
public:
	Linklist();//构造函数
	~Linklist()   //析构函数释放头指针
	{
		delete head;
	}

	int CreateLinklist(int n);//创建链表
	int TravelLinklist();//遍历链表

	int DeleteLinklist(T n);//删除链表里的东西
	int ClearLinklist();//清空链表

	int DestroyLinklist();
};

template<class T>
Linklist<T>::Linklist()
{
	size = 0;
	head = new Node<T>;
	head->next = NULL;
}

template<class T>
int Linklist<T>::CreateLinklist(int n)
{
	if(n <= 0)
	{
		cout << "创建不成功.."<< endl;
		return 0;
	}
	Node<T> *pnew; //创建的新节点
	Node<T> *pt; //下标节点
	pt = head; //先指向头节点

	this->size = n;
	for(int i = 0; i < this->size; i++)
	{
		pnew = new Node<T>;
		pnew->next = pt->next;
		pt->next = pnew;
		cin >> pnew->data;
		pt = pnew;
	}

	cout <<"Linklist created successfully..."<< endl;
}

template<class T>
int Linklist<T>::TravelLinklist()
{
	if(this->size == 0 && head != NULL)
	{
		cout << "该链表为空...."<< endl;
		return 0;
	}
	if(head == NULL)
	{
		cout << "不存在该链表..."<<endl;
	}
	
	Node<T> *pt;
	pt = head->next;
	for(int i = 0;i < this->size; i++)
	{
		if(pt != NULL)
		{
			//cout << "sas"<<endl;
			cout <<pt->data << " ";
			pt = pt->next;
		}
	}
	cout << endl;
	return 0;
}

template <class T>
int Linklist<T>::DeleteLinklist(T a)
{
	if(this->size == 0)
	{
		cout<< "链表以为空...."<<endl;
	}
	
	Node<T> *pt;
	pt = head;
	Node<T> *temp = pt;
	for(int i = 0;i < this->size; i++)
	{
		if(pt->next != NULL)
		{
			pt = pt->next;
			if(pt->data == a)
			{
				temp->next = pt->next;
				delete pt;
				this->size--;
				return 0;

			}
			temp = temp->next;
		}
	}
	cout<< "未找到该data...删除失败...." << endl;
	return 0;
}

template <class T>
int Linklist<T>::ClearLinklist()
{

	if(this->size == 0)
	{
		cout<< "该链表已为空..."<<endl;
		return 0;
	}

	Node<T> *pt = head->next;
	for(int i = 0; i < size; i++)
	{
		head->next = pt->next;
		delete pt;
		pt = head->next;
	}
	size = 0;
	cout<< "已清空链表" <<endl;
	return 0;
}


template <class T>
int Linklist<T>::DestroyLinklist()
{
	if(size == 0)
	{
		delete head;
		head = NULL;
		cout<<"链表已销毁"<<endl;
		return 0;
	}

	Node<T> *pt = head->next;
	for(int i = 0; i < size; i++)
	{
		head->next = pt->next;
		delete pt;
		pt = head->next;
	}
	size = 0;
	head = NULL;
	cout<< "已销毁链表" <<endl;
	return 0;
}


int main()
{

	Linklist<int> a;

	a.CreateLinklist(5);
	a.TravelLinklist();

	a.DeleteLinklist(5);
	a.TravelLinklist();

	a.ClearLinklist();
	a.TravelLinklist();

	a.DestroyLinklist();

	system("pause");
}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值