在初学线性表的时候,感觉链表实现起来确实很绕,毕竟没有顺序表那么直观,不过熟悉时候,感觉也就是把一个一个节点连接起来,只要在纸上画一画,其实也是比较好理解的。
话不多少,直接上代码。
首先是节点的结构
template<class T>
struct Node{
//数据
T Data;
//指向下一个节点的指针
Node<T>* Next;
};
构造函数
template<class T>
LinkList<T>::LinkList(T* data, int len)
{
Head = new Node<T>;
Head->Next = nullptr;
Node<T>* sign = Head;
for(int i=0;i<len;i++)
{
Node<T>* p = new Node<T>;
p->Data = data[i];
p->Next = nullptr;
sign->Next = p;
sign = p;
}
}
![img_4729c0b34b03f262471197ffffa634e2.png](https://yqfile.alicdn.com/img_4729c0b34b03f262471197ffffa634e2.png?x-oss-process=image/resize,w_1400/format,webp)
图1 构造过程
插入函数
template<class T>
void LinkList<T>::ele_insert(T data, int posi)
{
Node<T>* sign = Head;
for(int i=1;i<posi;i++)
sign = sign->Next;
Node<T>* p = new Node<T>;
p->Data = data;
p->Next = sign->Next;
sign->Next = p;
}
![img_183b080b2de2aa4899c3c05dabaac80c.png](https://yqfile.alicdn.com/img_183b080b2de2aa4899c3c05dabaac80c.png?x-oss-process=image/resize,w_1400/format,webp)
图2 插入过程
其实单链表比较不好理解的地方也就是向链表中插入节点,相信上面两幅草图与代码描述的还是比较清晰的。当然,功能函数远不止如此,根据实际需求添加即可。源码链接:
LinkList.h
LinkList.cpp