链表在具有动态数组的语言中有任何价值吗?

Does a linked list have any value in a language which has dynamic arrays?

链表在具有动态数组的语言中是否具有任何值,例如Python(当然,具有列表数据结构)?

我目前理解 python 中的列表实际上只是一个静态数组,随着插入更多数据,它会将自己重新定义为一个新数组(大小更大),将数据从旧数组复制到新数组中新的(从而使其动态)。这是正确的吗?

我也理解列表和链表在内存中存储数据的方式不同(列表以连续方式和链表以非连续方式),但这有什么主要优势吗?

是的,确实如此。从 linked 列表中删除 link 是 O(1),而对于动态数组它是线性的。

假设你想为 LRU 构建一个数据结构。通常,您会有一个用于 "touch" 操作的 hash-table,以及一个序列数组来查看老化的内容。当访问一个项目时,散列 table 在序列中找到它,并将其移动到末尾。如果需要逐出某个项目,则使用序列中的第一个项目在散列 table 中查找该项目,然后将其删除。

在此示例中,使用 linked-list 进行序列操作意味着一切都在(预期)O(1) 时间内运行。使用动态向量,一切都是线性的。链表仍有其用途。