如何实现100万个节点的链表?

时间:2015-12-14 09:03:54

标签: algorithm graph linked-list

我最近参加了微软面试。

我被要求用100万个节点实现链表?你将如何访问999999th节点?

这个问题的最佳设计策略和实施是什么?

3 个答案:

答案 0 :(得分:13)

链接列表的变化相当少,因为很多变化意味着它不是链接列表。

您可以通过单链接或双链接来改变它。单链接是你有一个指向头部的指针(第一个节点,一个说),它指向B指向C等。要将其转换为双链表,你还要添加一个从C到B和B的链接。到A。

如果你有一个双链表,那么保留指向列表尾(最后一个节点)和头的指针是有意义的,这意味着访问最后一个元素是便宜的,而接近结尾的元素更便宜,因为你可以向前或向前工作......但是......你需要知道你想要的是在列表的最后......并且在一天结束时,链表仍然只是那个,如果它是由于其用例的性质而变得非常大并且这是一个问题,因此应该选择除链表之外的存储结构。

你当然可以杂交你的链接列表,所以你可以索引它或者其他东西,例如理论上没有错,但如果你索引所有节点,那么链表性质不再有多大价值,如果你只索引一些,那么索引节点之间的节点必须进行排序或者某种东西,这样你就可以找到一个关闭节点并朝向目标节点工作......可能这永远不会是最优的,应该选择更好的数据结构

当你不想做某个特定节点之类的事情但是想要不管迭代节点时,都应该使用一个链表。

答案 1 :(得分:3)

我不知道我要说些什么,但是,这里有:

你可以conceptually拆分sqrt(1000000) 中的列表,这样你就可以拥有"引用指针"每1000个元素。

将其视为1000 linked lists每个1000 elements代表您的1000000 elements列表。

这是我想到的!

答案 2 :(得分:1)

正如迈克尔所说,你应该首先介绍链表的两个经典变体。接下来你要做的就是询问插入,搜索和删除模式。

这些模式将指导您更好地适应数据结构,因为 nobody 需要一个包含一百万个节点的简单链表或双链表。