模板类的声明和实现要放在同一个文件夹下才行,不然会提示找不到函数
- #ifndef LinkList_HH
- #define LinkList_HH
- #include<stdlib.h>
- #include <stdio.h>
- template <typename type>
- struct Node
- {
- type value;
- Node *next;
- };
- template <typename type>
- class LinkList
- {
- private:
- int Length;
- Node<type> *head;
- public:
- LinkList();
- bool add(type);//添加节点
- bool remove(int);//删除节点
- type getValue(int);//获得某节点的值
- int getIndex(type);//获取某节点的索引
- int getLength();//获取链表的长度
- Node<type>* getHead();//获取链表的头指针
- bool addnode(int ,type);//增加节点信息 插入到第int个之后
- ~LinkList();//释放链表
- };
- template <typename type>
- LinkList<type>::LinkList()
- {
- head = (new Node<type>());
- Length = -1;
- head->next = NULL;
- }
- template <typename type>
- bool LinkList<type>::add(type value)
- {
- try{
- if(Length == -1)
- {
- head->value = value;
- head->next = NULL;
- Length = 0;
- 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;
- ++Length;
- return true;
- }catch(...){}
- return false;
- }
- template <typename type>
- bool LinkList<type>::remove(int index)
- {
- if(index > Length || index < 0)
- {
- return false;
- }
- Node<type> *aTemp = head;
- Node<type> *pTemp = NULL;
- int count = 0;
- while(count <= Length)
- {
- if(count == index && index == 0)
- {
- head =aTemp->next;
- free(aTemp);
- aTemp = NULL;
- Length--;
- break;
- }
- if(count == index)
- {
- pTemp->next = aTemp->next;
- free(aTemp);
- Length--;
- aTemp = NULL;
- break;
- }
- pTemp = aTemp;
- aTemp = aTemp->next;
- count++;
- }
- return true;
- }
- template <typename type>
- bool LinkList<type>::addnode(int index, type value)
- {
- try{
- if(index ==Length)
- {
- add(value);
- return true;
- }
- else if(index<0||index>Length)
- {
- printf("不可预料的站点位置\n");
- return false;
- }
- int count =0;
- Node<type> *temp = head;
- while(count<index)
- {
- temp = temp->next;
- count++;
- }
- Node<type> *node = new Node<type>();
- node->value = value;
- node->next = temp->next;
- temp->next = node;
- ++Length;
- return true;
- }catch(...){}
- return false;
- }
- template <typename type>
- int LinkList<type>::getLength()
- {
- return Length+1;
- }
- template <typename type>
- Node<type>* LinkList<type>::getHead()
- {
- return head;
- }
- template <typename type>
- type LinkList<type>::getValue(int index)
- {
- if(index < 0 || index > Length)
- {
- return NULL;
- }
- Node<type> * temp = head;
- int count = 0;
- while(count <= Length)
- {
- if(count == index)
- {
- return temp->value;
- }
- temp = temp->next;
- count++;
- }
- return NULL;
- }
- template <typename type>
- int LinkList<type>::getIndex(type value)
- {
- if(Length == -1)
- {
- return -1;
- }
- Node<type> *temp = head;
- int count = 0;
- while(count <= Length)
- {
- type v = temp->value;
- if(v == value)
- {
- return count;
- }
- temp = temp->next;
- count++;
- }
- return -1;
- }
- template <typename type>
- LinkList<type>::~LinkList()
- {
- Node<type> *temp = head;
- Node<type> *temp1 = NULL;
- int count = 0;
- while(count <= Length)
- {
- temp1 = temp;
- if(temp1 != NULL)
- {
- temp = temp->next;
- free(temp1);
- temp1 = NULL;
- }
- count++;
- }
- }
- #endif