#ifndef list_HH
#define list_HH
#include <iostream>
#include<stdlib.h>
#include<typeinfo>
/*
author 王金龙
QQ: 1473371475
*/
using namespace std;
template <typename type>
struct Node
{
type value;
Node *next;
};
template <typename type>
class List
{
private:
int len;
Node<type> *head;
public:
List();
~List();
bool add(type);
bool remove(int index);
type getValue(int index);
int getIndex(type value);
int getLength();
void traverse();
};
template <typename type>
List<type>::List()
{
head = (new Node<type>());
len = -1;
head->next = NULL;
}
template <typename type>
bool List<type>::add(type value)
{
try{
if(len == -1)
{
if(head == NULL)
{
head = (new Node<type>());
len = -1;
}
head->value = value;
head->next = NULL;
len++;
return true;
}
Node<type> *temp = head;
while(temp->next != NULL)
{
temp = temp->next;
}
Node<type> *node = new Node<type>();
node->value = value;
node->next = NULL;
temp->next = node;
++len;
return true;
}catch(...){}
return false;
}
template <typename type>
bool List<type>::remove(int index)
{
if(index > len || index < 0)
{
return false;
}
Node<type> *aTemp = head;
Node<type> *pTemp = NULL;
int count = 0;
while(count <= len)
{
if(count == index && index == 0)
{
head =aTemp->next;
free(aTemp);
aTemp = NULL;
len--;
break;
}
if(count == index)
{
pTemp->next = aTemp->next;
free(aTemp);
len--;
aTemp = NULL;
break;
}
pTemp = aTemp;
aTemp = aTemp->next;
count++;
}
return true;
}
template <typename type>
int List<type>::getLength()
{
return len+1;
}
template <typename type>
type List<type>::getValue(int index)
{
if(index < 0 || index > len)
{
return NULL;
}
Node<type> * temp = head;
int count = 0;
while(count <= len)
{
if(count == index)
{
return temp->value;
}
temp = temp->next;
count++;
}
return NULL;
}
template <typename type>
int List<type>::getIndex(type value)
{
if(len == -1)
{
return -1;
}
Node<type> *temp = head;
int count = 0;
while(count <= len)
{
type v = temp->value;
if(v == value)
{
return count;
}
temp = temp->next;
count++;
}
return -1;
}
template <typename type>
void List<type>::traverse()
{
if(len == -1)
{
return;
}
Node<type> *temp = head;
int count = 0;
while(count <= len)
{
cout << temp->value << ", ";
temp = temp->next;
++count;
}
cout << endl;
}
template <typename type>
List<type>::~List()
{
Node<type> *temp = head;
Node<type> *temp1 = NULL;
int count = 0;
while(count <= len)
{
temp1 = temp;
temp = temp->next;
if(temp1 != NULL)
{
delete temp1;
temp1 = NULL;
}
count++;
}
}
#endif
仿JavaAPI 链表适用各种数据类型
最新推荐文章于 2024-05-02 20:57:04 发布