基本概念
链表实际上是线性表的链式存储结构,与数组不同的是,它是用一组任意的存储单元来存储线性表中的数据,存储单元不一定是连续的,且链表的长度不是固定的,链表数据的这一特点使其可以非常的方便地实现节点的插入和删除操作,链表的每个元素称为一个节点,每个节点都可以存储在内存中的不同的位置,为了表示每个元素与后继元素的逻辑关系,以便构成“一个节点链着一个节点”的链式存储结构。
链表分类
- 单向链表
- 结构表示
public class Node { /** * 数据 */ private Object data; /** * 下一个节点的指针 */ private Node next; } - 双向链表
- 结构表示
public class Node { /** * 数据 */ private Object data; /** * 前一个节点的指针 */ private Node prev; /** * 下一个节点的指针 */ private Node next; } - 环形链表
链表的经典算法题(每日一题详见github)
-
1669. 合并两个链表 (难度系数:中等)(解法已经更新,详见github)
-
138. 复制带随机指针的链表(难度系数:中等)(解法已经更新,详见github)
-
61. 旋转链表(难度系数:中等)
-
19. 删除链表的倒数第 N 个结点(难度系数:中等)(解法已经更新,详见github)
-
24. 两两交换链表中的节点(难度系数:中等)(解法已经更新,详见github)
-
141. 环形链表(难度系数:中等)(解法已经更新,详见github)(解法已经更新,详见github)
-
206. 反转链表(难度系数:简单)(解法已经更新,详见github)
-
21. 合并两个有序链表(难度系数:简单)(解法已经更新,详见github)
-
23. 合并K个升序链表(难度系数:困难)(解法已经更新,详见github)
链表实践
- AQS的使用
- HashMap中的使用