c++模板单循环链表

#include "stdafx.h"
#include
using namespace std;
/*1 应用模板 2使用class定义node,而不是struct */
//链表节点
template
class ListNode
{
public://引用public,避免了使用get,set所带来的麻烦
	T data;
	ListNode*next;
public:
	ListNode(ListNode*nextnode=0,const T&val=T())
	{
		data=val;
		next=nextnode;
	}
};
//链表的实现
template
class List
{
private:
	ListNode*head,*tail;
	int size;
public:
	List();
	virtual~List();
	void Insert_Front(const T&e);//向表头插入节点
	void Insert_End(const T&e);//想表尾插入节点
	ListNode*Find(const T&e);//查找指定节点
	bool Delete(const T&e);//删除指定节点
	List&Delete_All();//删除除头结点的所有节点
	bool IsEmpty();//测试链表是否为空
	bool Size(){return size;}//返回节点数
	void OutPut();
};
//************************实现**********//
template
List::~List()
{
	Delete_All();
	delete head;
}
template
List::List()
{
	head=new ListNode();
	tail=head;
	head->next=head;
}
template
void List::Insert_Front(const T &e)
{
	ListNode*NewNode=new ListNode(0,e);
	if(head->next==head)//链表为空
	{
		head->next=NewNode;
		NewNode->next=head;
		tail=NewNode;
	}
	else
	{
		NewNode->next=head->next;
		head->next=NewNode;
	}
	++size;
}
template
void List::Insert_End(const T&e)
{
	ListNode*NewNode=new ListNode(0,e);
	if(head->next==head)//链表为空
	{
		head->next=NewNode;
		NewNode->next=head;
		tail=NewNode;
	}
	else
	{
		tail->next=NewNode;
		NewNode->next=head;
		tail=NewNode;
	}
	++size;
}
template
ListNode* List::Find(const T&e)
{
	ListNode*move=head->next;
	while(move->data!=e)
	{
		move=move->next;
		if(move==head)
			return NULL;
	}
	return move;
}
template
bool List::Delete(const T &e)
{
	ListNode*move=head->next;//删除节点
	ListNode*pmove=head;//删除节点前一个节点
	while(move->data!=e)
	{
		move=move->next;
		pmove=pmove->next;
		if(move==head)
			return false;
	}
	pmove->next=move->next;
	if(move==tail)  //如果删除的是尾节点
		tail=pmove;
	delete move;
	return true;
}
template
void List::OutPut()
{
	ListNode*move=head->next;
	while(move!=head)
	{
		cout<data<<""<next;
	}
	cout<
List& List::Delete_All()
{
	ListNode*movenext,*move=head->next;
	while(move!=head)
	{
		movenext=move->next;
		delete move;
		move=movenext;
	}
	head=tail;
	head->next=head;
	return *this;
}
template
bool List::IsEmpty()
{
	if(head->next=head)
		return true;
	else
		return false;
}
int main()
{
	List* l=new List();
	l->Insert_Front(1);
	l->Insert_Front(2);
	l->Insert_End(3);

	cout<<"查找节点的地址为"<Find(1)<OutPut();

	cout<<"删除数据为2的节点"<Delete(2);
	l->OutPut();

	cout<<"删除所有节点"<Delete_All();
	l->OutPut();

	return 0;
}

你可能感兴趣的:(算法,c++,delete,insert,list,output,include)