注意,本文的链表用数组来模拟实现,代码中不涉及指针。
在讲解这个内容之前,先来回忆数组能够完成哪些操作:
(1)任意访问一个元素,时间复杂度为 O ( 1 ) O(1) O(1);
(2)删除一个元素,要移动此后的所有元素,时间复杂度为 O ( n ) O(n) O(n);
(3)在任意位置之后增添一个元素,要移动此后的所有元素,时间复杂度为 O ( n ) O(n) O(n);
但如果我们的问题并不需要访问任意元素,只需要进行删除和添加,或者一些简单的求前驱后继的问题,用数组显然是不划算的。当有m个操作时,时间复杂度为 O ( n m ) O(nm) O(nm)。
您需要写一种数据结构,维护一个序列,初始序列中只有一个编号为 1 1 1的数。要求提供四种操作:
(1)格式: 1 1 1 x x x y y y,表示在编号为 x x x的数后添加一个编号为 y y