一、基础条件
- 结合迭代器,使用链表,可以做到删除和插入元素都只需要O(1) 的时间开销
- 数据合理(有序,无重复)
二、并集
- 在其中一个链表A上通过迭代器迭代遍历,与另一个链表B通过迭代器遍历比较;
- 由于JAVA链表是双链表实现,很容易得到链表A的next指针的前后置节点的值(L和R,其中:L < R);
- 以此为区间比较链表B的next指针指向的值 -> K;( K != L ,K != R)
- 如果 K < L,K 值插入链表A,链表B往前走,更新next指针刷新 K 值;
- 如果L < K < R,K插入链表A,L的值更新为原K的值,B链表刷新K值;
- 如果L < R < K,L赋值为原R,R值刷新为链表A的next指向的值;
- 根据上述原理,直至两个链表都迭代完成,如果A长度为N,B长度为M;
- 总花费时间:O(N) + O(M),只保留最高次幂,最终:T(N) = O(N);
三、交集
交集原理就更简单了,还是迭代器,找一个链表作为参照,两个分别迭代,没当交点就跳过,否则就移除,两个链表都走完之后,参照链表删完非交点后剩下的就是交集了。
时间复杂度,还是取最高次幂:
T(N) = O(N)