时间复杂度:算法的时间开销与问题规模之间的关系
单链表
特点:与数组与vector对象不同,其属于非顺序存储,使用next访问下一个元素,数据存储时不仅要存储数据,还需要存储下一个节点的地址,最后一个节点指向空值
1.插入元素
①带头节点,插入元素不需要单独定义表头,但是在传递参数时需要包含头节点
②不带头节点,插入元素时需要单独定义表头,传递参数时不需要包含头节点
2.删除元素
利用next来进行,通常需要获知第一个节点
3.创建链表
//单链表节点定义c++
struct ListNode{
int val;
ListNode *next;
//ListNode(int x):val(x),next(nullpter){}
};
//分配新节点 上面的ListNode是可以更改的,属于自定义变量名
ListNode *head = nullptr;//定义一个初始为空的链表
head = new ListNode;//分配新节点
head->value = 12.5;
head->next = nullptr;//表示链表最后一个节点
双链表
特点:每个数据结点都有两个指针,分别指向直接前驱与后继
//双链表节点定义c++
struct ListNode{
int val;
ListNode *next;
ListNode *last;
//ListNode(int x):val(x),next(nullpter){}
};
循环链表:单链与双链表
链表的缺点:必须从第一个节点开始遍历所有数据
参考资料
c++链表(详解版)
C++链表及其创建