原理:
实现代码
#include <iostream>
using namespace std;
//节点
template<typename T>
struct Node
{
T data;
Node<T>* next;
Node<T>(T data);
};
//链表
template<typename T>
struct LinkList
{
Node<T> *head;
int size;
LinkList();
~LinkList();
//插入链表
void insertItem(T data,int index);
//删除元素
void deleteItem(int index);
//查找元素
Node<T>* queryItem(int index);
//清空链表
void clearLinkList();
//遍历链表
void showLinkList();
};
template<typename T>
Node<T>::Node(T data)
{
this->data=data;
next=NULL;
}
template<typename T>
LinkList<T>::LinkList()
{
head=new Node<T>({});
size=0;
}
template<typename T>
LinkList<T>::~LinkList()
{
delete head;
size=0;
}
template<typename T>
void LinkList<T>::insertItem(T data, int index)
{
//判断index是否合法
if(index<0 || index>size)
{
return;
}
//辅助指针
Node<T> *temp=head;
//将辅助指针移动到指定位置
for(int i=0;i<index;i++)
{
temp=temp->next;
}
//插入
Node<T> *item=new Node<T>(data);
item->next=temp->next;
temp->next=item;
//更新链表大小
size++;
}
template<typename T>
void LinkList<T>::deleteItem(int index)
{
//判断index是否合法
if(index<0 || index>size)
{
return;
}
//初始化辅助指针
Node<T>* temp=head;
//将辅助指针移动到指定位置
for(int i=0;i<index;i++)
{
temp=temp->next;
}
//删除相应元素
temp->next=temp->next->next;
//更新链表大小
size--;
}
template<typename T>
Node<T>* LinkList<T>::queryItem(int index)
{
//判断index是否合法
if(index<0 || index>size)
{
return NULL;
}
//初始化辅助指针
Node<T>* temp=head;
//将辅助指针移动到指定位置
for(int i=0;i<index;i++)
{
temp=temp->next;
}
//返回对应元素
return temp->next;
}
template<typename T>
void LinkList<T>::clearLinkList()
{
//初始化辅助指针
Node<T>* temp=head;
//删除链表的子结点
for(int i=0;i<size;i++)
{
delete temp->next;
temp=temp->next;
}
head->next=NULL;
size=0;
}
template<typename T>
void LinkList<T>::showLinkList()
{
//初始化辅助指针
Node<T>* temp=head;
//遍历链表
for(int i=0;i<size;i++)
{
temp=temp->next;
cout<<temp->data<<" ";
}
cout<<endl;
}
int main()
{
//初始化链表
LinkList<int> list;
list.insertItem(1,0);
list.insertItem(2,0);
list.insertItem(3,0);
list.insertItem(4,0);
list.insertItem(5,0);
list.insertItem(6,0);
//测试
cout<<list.size<<endl;
list.showLinkList();
list.insertItem(9,2);
list.showLinkList();
list.deleteItem(2);
list.showLinkList();
cout<<list.queryItem(2)->data<<endl;
list.clearLinkList();
list.showLinkList();
return 0;
}
运行结果