单链表

单链表

#include <stdio.h>
#include <iostream>
template <typename DataType> class ListNode;
template <typename DataType> 
class LinkList{
private:
	ListNode<DataType> *head;
	int length;
	static const int defaultMax = 15;
	int maxSize;
public:
	 LinkList()
	 {
	 	head = new ListNode<DataType>();
	 	maxSize = defaultMax;
	 	length =0;
	 }
	 LinkList(ListNode<DataType> *node,int Size = defaultMax)
	 {
	 	maxSize = Size;
	 	head = node;
	 	length = 0;
	 }
	 ~LinkList()
	 {
	 	delete head;
	 }
	 int getLength();
	 bool insertNode(int location,DataType newData);
	 bool removeNode(ListNode<DataType> *q);
	 ListNode<DataType>* findNode(DataType value);
	 bool cleanLink();
	 DataType getNodeData(ListNode<DataType> *p);
	 void getAllNode();
	 bool insert(DataType newData);
};
template <typename DataType> 
class ListNode
{
private:
	friend class LinkList<DataType>;
	ListNode *next;
	DataType data;
public:
	ListNode()
	{
		next = NULL;
	}
	ListNode(DataType item,ListNode<DataType> *nextNode = NULL)
	{
		data = item;
		next = nextNode;
	}
	~ListNode()
	{
		next = NULL;
	}
	DataType getData()
	{
		return data;
	}
	ListNode* getNext()
	{
		return next;
	}
};
template <typename DataType>
void LinkList<DataType>::getAllNode()
{
	if(length== NULL)
	{
		std::cout<<"there is nothing"<<std::endl;
	}
	ListNode<DataType>* cur = head;
	while(cur!=NULL)
	{
		std::cout<<getNodeData(cur)<<","<<std::endl;
		cur= cur->next;
	}
}
template <typename DataType>
bool LinkList<DataType>::insertNode(int location,DataType newData)
{
	if(length>=maxSize||location<=0||location>length)
	{
		return false;
	}
	else{
		ListNode<DataType>* cur=head;
		for(int i = 1;i<location;i++)
		{
			cur = cur->next;
		}
		ListNode<DataType> *temp = new ListNode<DataType>(newData,cur->next);
		cur->next = temp;
		length++;
		return true;
	}
}
template <typename DataType>
int LinkList<DataType>::getLength()
{
	int i =0;
	ListNode<DataType> *cur=head;
	while(cur!=NULL)
	{
		cur=cur->next;
		i++;
	}
	return i;
}
template <typename DataType>
bool LinkList<DataType>::insert(DataType newData)
{
	if(length>=maxSize)
	{
		return false;
	}
	else if(length == 0)
	{
		ListNode<DataType>* temp = new ListNode<DataType>(newData);
		head->next = temp;
		std::cout<<newData<<" is inserted!"<<std::endl; 
		length++;
		return true;
	}
	else
	{
		ListNode<DataType>*temp = new ListNode<DataType>(newData,head->next);
		head->next = temp;
		std::cout<<newData<<" is inserted!"<<std::endl; 
		length++;
		return true;
	}
}
template <typename DataType>
bool LinkList<DataType>::removeNode(ListNode<DataType> *q)
{
	if(length <= 0)
	{
		return false;
	}
	ListNode<DataType> *cur=head,*temp;
	while(cur!=NULL&& cur->next!= q)
	{
		cur=cur->next;
	}
	if(cur==NULL)
	{
		return false;
	}
	else
	{
		temp = cur->next;
		cur->next = temp->next;
		delete temp;
		length--;
		return true;
	}
}
template <typename DataType> 
ListNode<DataType>* LinkList<DataType>::findNode(DataType value)
{
	if(length <= 0)
	{
		return false;
	}
	ListNode<DataType> *cur=head;
	while(cur!=NULL&& cur->data!= value)
	{
		cur=cur->next;
	}
	if(cur==NULL)
	{
		return false;
	}
	else{
		return cur;
	}
}
template <typename DataType>
bool LinkList<DataType>::cleanLink()
{
	ListNode<DataType>* cur = head;
	while(cur!=NULL)
	{
		cur->data = NULL;
		cur= cur->next;
	}
	return true;
}
template <typename DataType>
DataType LinkList<DataType>::getNodeData(ListNode<DataType> *p)
{
		if(length <= 0)
	{
		return false;
	}
	ListNode<DataType> *cur=head;
	while(cur!=NULL&& cur!= p)
	{
		cur=cur->next;
	}
	if(cur==NULL)
	{
		return false;
	}
	else{
		return cur->data;
	}
}
int main()
{
	LinkList<int>* linkList = new LinkList<int>();
	int i=0;
	while(linkList->insert(i++))
	{
	}
	std::cout<<"aaaaaa"<<std::endl;
	linkList->getAllNode();
	system("pause");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值