链表的优点除了「插入删除不需要移动其他元素」之外,还在于它是一个局部化结构。就是说当你拿到链表的一个 node 之后,不需要太多其它数据,就可以完成插入,删除的操作。而其它的数据结构不行。比如说 array,你只拿到一个 item 是断不敢做插入删除的。
典型的例子是一种数据同时需要满足 ordered(注意不是 sorted),又要满足 O(log(n)) 或者 O(1) 访问。那就需要同时用 map/hashmap 和另一种 ordered container 来维护。如果 90% 的 code 通过 map/hashmap,又要维护 duel-container 的一致,那用链表作为 ordered container 就最合适。
当然了,局部化这个好处只有 intrusive 链表才有,就是必须 prev/next 嵌入在数据结构中。像 STL 和 Java 那种设计是失败了。
另外多说几句:
我不认为链表是 abstract data structure。Linked-lis