链表
今天主要:1. 掌握链表定义与特性 2.常见处理思路
基础概念
通过指针串联的线性结构。每个节点由指针域和数据域构成。
连接的入口称为“头节点”head,最后一个节点指向null(空指针)。常见类型有:单链表(如上图),双链表(中间指针为双向)和循环链表(头尾相连)。
与数组性能比较
链表在内存中不是连续分布的,与数组不同。链表适合数据量不固定,频繁增删,较少查询的情况。
数据类型 | 增删(时间复杂度) | 查询(时间复杂度) | 适合场景 |
---|---|---|---|
数组 | O(n) | O(1) | 数据量相对固定,频繁查询,增减较少 |
链表 | O(1) | O(n) | 数据量不固定,频繁增减,查询较少 |
(个人感觉代码处理的时候,跟elementree处理xml有一定相似)
203.移除链表元素
链表操作的常见两种方式:
- 在原链表操作;
- 创建虚拟节点。
主要考虑的特殊情况是,可能要删除的节点是头节点。
还有就要记住操作是个持续的过程,得用while函数。
206.反转链表
有双指针和递归两种解法。
3. 双指针法,相对好理解,有之前操作数组的基础;
4. 递归。本质还是沿用双指针的拆解思路,但是while改成了递归。