单链表
#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");
}