链表
特点
- 由无数个节点(value+next)组成,在内存中不连续
- 在新增和删除上效率更高
- 在查询时效率不如数组
实现
链表增删改操作实现过程中最基础的思想是:双指针
操作
合并多个排序过的链表一般可以用,最小堆或者分治算法
最小堆:比较同一位置的两个节点,取出最小的,再将指针后移
分治:将k个链表拆分成每一对,比较同一位置的两个节点,进行交换。
注意,在拆分k个链表的数组时,mid=(low+high)/2 这种写法是有问题的。因为如果 low 和 high 比较大的话,两者之和就有可能会溢出。改进的方法是将 mid 的计算方式写成 low+(high-low)/2。更进一步,如果要将性能优化到极致的话,我们可以将这里的除以 2 操作转化成位运算 low+((high-low)>>1)。因为相比除法运算来说,计算机处理位运算要快得多。