仿JavaAPI 链表适用各种数据类型

来源:互联网 发布:pvf物品导入数据库 编辑:程序博客网 时间:2024/05/22 12:20
#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